0

私は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 にメッセージを送信した後、最初のメッセージの後にメッセージを送信できません。私のNode.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サーバーをチェックしましたが、すべて問題ないようです。何が問題なのですか?前もって感謝します。

4

1 に答える 1

1

基本的に、ブラウザからノードまでのイベントを python にプロキシし、その逆も同様です。これは、ブラウザがノードにソケット イベントを発行する必要があり、ノードがソケット イベントをリッスンするときに、別のイベントを発行する必要があることを意味します。パイソンまで。

それはトリッキーですが、不可能ではありません。

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

クライアント <=> サーバーの 1 つのペアで動作するようにしてから、もう 1 つのペアで動作するようにしてから、ソケット イベントを最後に転送する作業を行います。

これは非常に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')

サーバーがそれらをリッスンするため。

クライアントがソケット イベントを発行しない場合、サーバーはイベント ハンドラを呼び出しません。

于 2013-10-31T23:35:55.360 に答える