如何在socket中传递参数

时间:2015-09-23 14:12:36

标签: node.js sockets

我需要在socket中传递参数,我使用方法emit 服务器端:

var http=require('http');

var numero_giocatori=0;

var express = require('express');
var app = express();

var net = require('net');

var client = new net.Socket();

var vettore_clienti=[];
var chatServer = net.createServer();


chatServer.on('connection', function(client) {
    numero_giocatori=numero_giocatori+1;
    vettore_clienti.push(client);
    if(numero_giocatori===2){
        console.log("IScritto "+numero_giocatori);
        for(var i=0;i<vettore_clienti.length;i++){
            vettore_clienti[i].emit('vettore_clienti',vettore_clienti);
        }
    }
});
chatServer.listen(8000,'127.0.0.1');

但我不知道如何阅读我首先使用emit方法传递的值 客户端:

var net = require('net');

var client = new net.Socket();

client.connect(8000, '127.0.0.1', function() {

});

client.on('data', function(data) {
console.log(data);
});

2 个答案:

答案 0 :(得分:1)

我不确定node.js网络套接字库是否有一个emit方法。

文档建议通过套接字write方法通过套接字发送数据。

socket.io允许您创建websocket连接,并发出和侦听任意事件:

http://socket.io/docs/server-api/#server#emit

答案 1 :(得分:0)

Node的TCP套接字是通用的(另一端不一定是Node程序),也没有规定消息格式的任何标准。换句话说:您可以自由地为消息创建自己的编码。

或者您可以简单地使用JSON(如果您不关心与更适合您的特定用例的编码相比所产生的开销):

服务器

var http=require('http');

var numero_giocatori=0;

var express = require('express');
var app = express();

var net = require('net');

var client = new net.Socket();

var vettore_clienti=[];
var chatServer = net.createServer();

function sendMessage(client, messageType) {
    var message = {type: messageType, data: [].slice.call(arguments, 2)};
    client.write(JSON.stringify(message)); // Sending a string implicitly converts it into a buffer using utf-8
}


chatServer.on('connection', function(client) {
    console.log('Got connection', client);
    numero_giocatori=numero_giocatori+1;
    vettore_clienti.push(client);
    if(numero_giocatori===2){
        console.log("IScritto "+numero_giocatori);
        for(var i=0;i<vettore_clienti.length;i++){
            sendMessage(vettore_clienti[i], 'welcome', "You are client number", i+1, 'of', vettore_clienti.length);
        }
    }
});
chatServer.listen(8000,'127.0.0.1');

客户端

var net = require('net');

var client = new net.Socket();

client.connect(8000, '127.0.0.1', function() {
    console.log('Connected');
});

client.on('data', function(data) {
    var message = JSON.parse(data.toString()); // calling toString() with no arguments assumes the buffer is in utf-8
    var messageType = message.type;
    var data = message.data;
    console.log.apply(console, data);
});

请注意,通过这种方式,您只能发送实际可以用JSON表示的内容。这会排除函数和NaNInfinity等值。发送一组完整的函数和流的客户端,就像你在示例代码中尝试的一样,因此不起作用。