【问题标题】:How do I create a Python socket server that listens on a file descriptor?如何创建侦听文件描述符的 Python 套接字服务器?
【发布时间】:2012-07-20 18:55:56
【问题描述】:

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

我使用绑定到我的本地主机和特定端口的套接字获得了something working

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

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

基本上我需要this example from the Nodejs docs(指定路径的版本)的Python服务器对应部分:

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

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

【问题讨论】:

  • 您正在寻找 socket.AF_UNIX 而不是 socket.AF_INET
  • 非常感谢,这条简洁的评论足以改进我的谷歌查询,并让我看到我在更新中添加的示例。
  • 在这种情况下,您可以使用代码示例回答您自己的问题并接受它。

标签: python sockets node.js ipc


【解决方案1】:

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

我在这里发布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');
  })
  ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 2017-07-03
    • 1970-01-01
    • 2019-01-28
    • 2023-03-14
    • 2014-04-25
    相关资源
    最近更新 更多