【问题标题】:Keeping socket connection alive with Python client and Node.js server使用 Python 客户端和 Node.js 服务器保持套接字连接处于活动状态
【发布时间】:2016-06-05 23:05:00
【问题描述】:

我正在尝试将 Node.js 与 Python 结合以创建套接字连接。

问题是我可以发送数据,但我无法保持连接。

这是我在 Node.js 中的服务器

var net = require('net');

var HOST = '127.0.0.1';
var PORT = 1337;

net.createServer(function(sock) {

    console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);

    sock.on('data', function(data) {

        console.log('DATA ' + sock.remoteAddress + ': ' + data);
        sock.write('You said "' + data + '"');

    });

    sock.on('close', function(data) {
        console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort);
    });

}).listen(PORT, HOST);

console.log('Server listening on ' + HOST +':'+ PORT);

这是我在 Python 中的客户端

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connect the socket to the port where the server is listening
server_address = ('localhost', 1337)
print >>sys.stderr, 'connecting to %s port %s' % server_address
sock.connect(server_address)

try:

    # Send data
    message = 'This is the message.'
    print >>sys.stderr, 'sending "%s"' % message
    sock.sendall(message)

finally:
    print >>sys.stderr, 'closing socket'

这很好用,但客户端在发送数据后立即断开连接。

最终,我希望能够给用户输入来发送数据,也可以接收数据。

任何关于如何做到这一点的建议将不胜感激。

【问题讨论】:

    标签: python node.js sockets tcp


    【解决方案1】:

    我将处理用户输入场景。到目前为止,您的程序只是运行并存在。

    您希望能够结合两个简单的阻塞操作,运行某种输入循环(例如while True: data = input()),同时处理传入流量。

    执行此操作的基本方法是使用 2 个线程,一个用于用户输入,另一个用于类似 while True: data = socket.recv(buff) 循环中的套接字连接,但这里还有另一个问题,因为您可能会阻塞单个连接 - 您将必须为每个连接指定一个线程。为了避免这种情况,您可以使用select,它为您异步维护套接字连接。

    如果没有用户输入,那么您可以只使用select——这足以以简洁的方式处理多个连接。

    无论哪种方式,我建议你看看一些基于select 的异步事件驱动框架,例如asyncioTwisted

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 2021-05-02
      • 2014-06-01
      • 2012-07-08
      • 2018-04-13
      相关资源
      最近更新 更多