我正在尝试创建一个简单的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);
});
});
但是,如何从客户端接收消息,以及如何将收到的消息发送给其他客户端。
答案 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]);
}
});
答案 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")
})
})