首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在TCP和Node.js之间发送消息

问不能在TCP和Node.js之间发送消息
EN

Stack Overflow用户
提问于 2013-09-21 07:33:22
回答 1查看 1.7K关注 0票数 0

我已经创建了一个python服务器,我使用node.js套接字模块在浏览器和tcp服务器之间进行通信。它们按层次连接起来,比如: Browser-> Node.js ->Python浏览器<- Node.js <-Python服务器--我可以将Node.js连接到TCP,我可以发送消息,但在发送第一条消息后,我不能从Node.js发送任何消息到Tcp,类似地,在我从Tcp发送消息到Node.js之后,我不能在第一条消息之后发送消息。我的Node.js代码:

代码语言:javascript
复制
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,一切看起来都很好。有什么问题吗?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-10-31 23:35:55

您本质上是将事件从浏览器代理到节点,然后再转到python,反之亦然--这意味着浏览器必须向节点发出套接字事件,然后当节点侦听套接字事件时,必须向python发出另一个事件。

这很棘手,但也不是不可能。

代码语言:javascript
复制
Browser      NodeJS        Python
CLIENT => SERVER/CLIENT <= SERVER

尝试让它处理一对客户端<=>服务器,然后处理另一对服务器,然后处理最后转发的套接字事件。

这是非常javascript-伪代码,但它只是为了说明这个想法:

代码语言: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)根据您的代码,您只需要在connect事件上写入套接字

代码语言:javascript
复制
tcpClient.on('connect',function() {
    console.log('client connected');
    tcpClient.write('node - tcp server a bağlanıldı!');
});

(2)查看如何/在何处发出套接字事件:

代码语言:javascript
复制
socket.on('sendMessage'...

socket.on('login'...

这些是自定义事件,必须通过

代码语言:javascript
复制
socket.emit('customEvent')

才能让服务器听他们的。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18930111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档