7

我正在尝试使 Javascript (Nodejs) 应用程序与 Python 应用程序通信。

我使用绑定到我的本地主机和特定端口的套接字来工作。

为了使事情变得更简单(例如,当部署到可能不允许我监听多个端口的环境时),我想更改我的实现以使用绑定到文件描述符的套接字。

我搜索了高低,但我发现的所有示例都使用端口。

基本上,我需要Nodejs 文档(指定路径的版本)中此示例的 Python 服务器对应部分:

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

有人可以提供一个简单的示例来显示、创建和绑定文件描述符套接字并在其上处理数据和/或指出我正确的方向吗?

4

1 回答 1

11

我稍微修改了这个很好的示例(例如,python 服务器必须侦听 TCP 而不是 UDP 套接字才能与 nodejs 客户端兼容。

我在这里发布 python 服务器和 nodejs 客户端代码以供参考:

蟒蛇服务器:

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 回答