【问题标题】:Cant send messages between TCP Server and Node.js无法在 TCP Server 和 Node.js 之间发送消息
【发布时间】:2013-09-26 15:06:14
【问题描述】:

我创建了一个 python tcp 服务器,我正在使用 node.js socketio 模块在浏览器和 tcp 服务器之间进行通信。从层次上讲,它们的连接方式如下: 浏览器->Node.js->Python TCP 服务器浏览器

var http = require('http');
var mysql = require('mysql');
var net = require('net');
var socketio = require('socket.io');

////////////////////////////////////////////////////////////////
// tcp socket
// Connection part to my python server
////////////////////////////////////////////////////////////////
var tcpClient = net.connect({port: 3001, host:"localhost"});
tcpClient.setEncoding("utf8");

tcpClient.on('connect',function() {
    console.log('client connected');
    tcpClient.write('node - tcp server a bağlanıldı!');
});

tcpClient.on('data', function(data) {
    console.log("tcp den gelen mesaj = "+ data.toString());
});

tcpClient.on('end', function() {
    console.log('client disconnected');
});

tcpClient.on('error', function(data) {
    console.log("error = " + data);
});

////////////////////////////////////////////////////////////////
// web socket
////////////////////////////////////////////////////////////////
var io = socketio.listen(3000);
io.sockets.on('connection', function (socket) {
    socket.on('sendMessage', function (data) {
        tcpClient.write("node - sendMessage");
        console.log(data);
    });

    socket.on('login', function (data) {
        tcpClient.write('node - login');
        console.log(data);
    });
});

我已经使用我编写的 Python 客户端检查了我的 Python TCP 服务器,一切似乎都很好。可能是什么问题?提前致谢。

【问题讨论】:

  • 您在客户端上看到客户端断开连接了吗?

标签: javascript python node.js sockets tcp


【解决方案1】:

您实际上是将浏览器中的事件代理到节点并转发到 python,反之亦然——这意味着您的浏览器必须向节点发出套接字事件,然后当节点侦听套接字事件时,必须向 python 发出另一个事件。

这很棘手,但并非不可能。

Browser      NodeJS        Python
CLIENT => SERVER/CLIENT <= SERVER

尝试让它与一对客户端服务器一起工作,然后是另一对,然后努力让套接字事件最后转发。

这是非常javascript-pseudo-code,但这只是为了说明这个想法:

//on your Browser - some jQuery
$('#login').on('click', function(){
  NodeSocket.emit('login');
}

//on your server.js/app.js
NodeSocket.on('login', function(){
 //Note that we are forwarding this event to Python
 PythonSocket.emit('login');
});

//on your server.py  ~whatever the python equivalent of this function is~
PythonSocket.on('login', function(){
 //do login stuff
 //Note that we are emitting an event back to Node
 NodeSocket.emit('loginSuccess');
});

//on your server.js/app.js
NodeSocket.on('loginSuccess', function(){
 //Note that we are forwarding this event to the Browser
 BrowserSocket.emit('loginSuccess');
});

//on your browser
BrowserSocket.on('loginSuccess', function(){
  console.log("Login Success!");
}

其他一些想法:

(1) 根据您的代码,您似乎只是在连接事件上写入套接字

tcpClient.on('connect',function() {
    console.log('client connected');
    tcpClient.write('node - tcp server a bağlanıldı!');
});

(2) 看看你如何/在哪里发出你的套接字事件::

socket.on('sendMessage'...

socket.on('login'...

这些是必须从客户端发出的自定义事件

socket.emit('customEvent')

为了让服务器监听它们。

如果客户端不发出套接字事件,服务器将永远不会调用事件处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多