无法在TCP服务器和节点.js之间发送消息
Cant send messages between TCP Server and Node.js
我创建了一个python tcp服务器,我正在使用node.js socketio模块在浏览器和tcp服务器之间进行通信。在层次结构上,它们连接如下:Browser->Node.js->Python TCP Server Browser<-Node.js<-Python Tcp Server我可以连接 Node.js 到 Tcp 服务器,我可以发送消息,但在我发送第一条消息后,我无法从 Node.js 向 TCP 服务器发送任何消息,同样,在我从 TCP 服务器向 Node 发送消息后.js我无法在第一条消息之后发送消息。我的节点.js代码:
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服务器,一切似乎都很好。可能有什么问题?提前谢谢。
你本质上是将事件从浏览器代理到节点,然后代理到 python,反之亦然——这意味着你的浏览器必须向节点发出套接字事件,然后当节点侦听套接字事件时,必须向 python 发出另一个事件。
这很棘手,但并非不可能。
Browser NodeJS Python
CLIENT => SERVER/CLIENT <= SERVER
尝试让它与一对客户端 <=> 服务器一起使用,然后与另一对服务器一起使用,然后努力使套接字事件最后转发。
这是非常javascript伪代码,但它只是为了说明这个想法:
//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')
以便服务器侦听它们。
如果客户端未发出套接字事件,则服务器将永远不会调用事件处理程序。
相关文章:
- 在索引.html和应用.js [node.js] 之间共享变量
- 什么's本地node.js服务器和python简单http服务器之间的区别
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 如何用moment.js列出两个日期之间的所有月份
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- html5视频播放器和视频js之间的关系
- moment.js在两个时区格式的日期之间存在差异
- JS中单词之间的空格
- 我如何知道js文件之间的javascript应用程序代码流
- Node.js服务器和浏览器之间共享二进制缓冲区
- 通过node.js和socket.io在两个用户之间发送消息
- 铯JS-两点之间的距离
- Node.js HTTP/NET——连接和请求之间的区别
- 在使用JS的Ajax调用中,ajaxComplete和beforesend之间有什么区别
- Bacon.js:流和属性之间的实际差异
- Ember.js:接受的子组件和父组件之间通信的最佳实践
- JS get元素之间的差异's属性与elem.getAttribute(attr)和elem[attr]
- 在DIV Angular JS之间切换
- 不同进程之间共享Node.js环境
- 使用PKCS7Padding在python和Node.js之间进行AES加密