简单的node.js套接字服务器

时间:2015-01-13 07:55:40

标签: node.js sockets heroku websocket socket.io

我正在尝试创建一个简单的node.js服务器,它允许我的基于套接字的iOS应用程序将其GPS坐标发送到服务器,服务器将GPS坐标广播到所有连接的iOS客户端。同样,客户端使用套接字连接到服务器。我尝试使用Heroku的Web服务器中的一些示例代码。代码被编辑为包括ANURAG的答案

var WebSocketServer = require("ws").Server
var http = require("http")
var express = require("express")
var app = express()
var port = process.env.PORT || 5000

app.use(express.static(__dirname + "/"))

var server = http.createServer(app)
server.listen(port)

console.log("http server listening on %d", port)

var wss = new WebSocketServer({server: server})
console.log("websocket server created")

var connectionList = [];

wss.on("connection", function(ws) {
    console.log("connection");
  connectionList.push(ws);
})

wss.on("message", function(data, id) {
    var mes = server.unmaskMessage(data);
    var str = server.convertToString(mes.message);
    console.log(str);
    var i;
    for(i = 0; i < connectionList.lenth; i++) {
         wss.sendMessage(one, str, connectionList[i]);
    }
});

如何修改此代码以便能够从我的应用程序(通过套接字)接收消息,然后将该消息发送给所有其他连接的iOS客户端。 (该消息只是一个简单的字符串)

奖金问题:因为Heroku让你使用它的环境端口(而不是你自己指定的端口),在我的iOS应用程序中,当我连接到服务器时,我是否只需指定服务器时打印到控制台的端口开始了。

感谢任何帮助,谢谢! :)

编辑:对于向客户广播,代码为:

wss.on('connection', function(ws) {
  ws.on('message', function(message) {
    wss.broadcast(message);
  });
});

但是,如何从客户端接收消息,以及如何将收到的消息发送给其他客户端。

2 个答案:

答案 0 :(得分:3)

在获取连接时,您需要存储这些连接。 然后,您可以使用这些连接向所有连接到服务器的设备发送消息。 你可以尝试这样的事情:

var connectionList = [];
wss.on("connection", function(ws) {
  connectionList.push(ws);
})

wss.on("message", function(data, id) {
    var mes = server.unmaskMessage(data);
    var str = server.convertToString(mes.message);
    console.log(str);
    var i;
    for(i = 0; i < connectionList.lenth; i++) {
         wss.sendMessage(one, str, connectionList[i]);
    }
});

在此处阅读更多内容:https://www.npmjs.com/package/websocketserver

答案 1 :(得分:1)

这是完整的index.js代码,以便服务器广播接收到客户端的消息:

var WebSocketServer = require("ws").Server
var http = require("http")
var express = require("express")
var app = express()
var port = process.env.PORT || 5000

app.use(express.static(__dirname + "/"))

var server = http.createServer(app)
server.listen(port)

console.log("http server listening on %d", port)

var wss = new WebSocketServer({server: server})
console.log("websocket server created")

wss.broadcast = function(data) {
  for (var i in this.clients)
    this.clients[i].send(data);
};


wss.on("connection", function(ws) {

  console.log("websocket connection open");

  ws.on('message', function(message) {
    console.log("message received by server");
    wss.broadcast(message);
    })

  ws.on("close", function() {
    console.log("websocket connection close")
  })
})
相关问题