7

Javascript(Nodejs)アプリをPythonアプリと通信させようとしています。

ローカルホストにバインドされたソケットと特定のポートを使用して、何かが機能するようになりました。

物事を簡単にするために(たとえば、複数のポートでリッスンできない環境にデプロイする場合)、ファイル記述子にバインドされたソケットを使用するように実装を変更したいと思いました。

高低を検索しましたが、見つけたすべての例でポートが使用されています。

基本的に、Nodejsドキュメント(パスを指定するバージョン)からのこの例に対するPythonサーバーのカウンターパートが必要です。

var client = net.connect({path: '/tmp/echo.sock'}

誰かがファイル記述子ソケットを示し、作成し、バインドし、その上でデータを処理する簡単な例を提供したり、正しい方向に私を向けたりできますか?

4

1 に答える 1

11

この素晴らしい例を少し変更しました(たとえば、Pythonサーバーはnodejsクライアントと互換性を持たせるためにUDPソケットではなくTCPでリッスンする必要があります。

参考までに、Pythonサーバーとnodejsクライアントのコードをここに投稿しています。

Pythonサーバー:

import socket
import os, os.path
import time

sockfile = "./communicate.sock"

if os.path.exists( sockfile ):
  os.remove( sockfile )

print "Opening socket..."

server = socket.socket( socket.AF_UNIX, socket.SOCK_STREAM )
server.bind(sockfile)
server.listen(5)

print "Listening..."
while True:
  conn, addr = server.accept()

  print 'accepted connection'

  while True: 

    data = conn.recv( 1024 )
    if not data:
        break
    else:
        print "-" * 20
        print data
        if "DONE" == data:
            break
print "-" * 20
print "Shutting down..."

server.close()
os.remove( sockfile )

print "Done"

Nodejsクライアント:

npmlogを使用して色付きのログ出力を取得しますnpm install npmlog

var net = require('net')
  , log = require('npmlog')
  , sockfile = './communicate.sock'
  ;

var client = net.connect( { path: sockfile });

client
  .on('connect', function () {
    log.info('client', 'client connected');
    client.write('hello server');
  })
  .on('data', function (data) {
    log.info('client', 'Data: %s', data.toString());
    client.end(); 
  })
  .on('error', function (err) {
    log.error('client', err);
  })
  .on('end', function () {
    log.info('client', 'client disconnected');
  })
  ;
于 2012-07-22T03:28:41.387 に答える