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

标签 node.js sockets heroku websocket socket.io

我正在尝试创建一个简单的 node.js 服务器,它允许我的基于套接字的 iOS 应用程序将它的 GPS 坐标发送到服务器,服务器将向所有连接的 iOS 客户端广播 GPS 坐标。同样,客户端使用套接字连接到服务器。我尝试使用 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);
  });
});

但是,我如何从客户端接收消息,以及如何将接收到的消息作为要广播给其他客户端的消息。

最佳答案

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

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

关于node.js - 简单的 node.js 套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27917293/

相关文章:

node.js - 如何防止express-ejs-layouts 包装我的其他页面?

c# - RestSharp 响应错误 : "Only one usage of each socket address (protocol/network address/port) is normally permitted"

Android套接字连接超时

java - Socket Java 到 C++ - 消息的长度始终为 8192 个字符

heroku - 通过 Jenkins 推送到 Heroku 的教程

python - 使用 python 在 Heroku 上启用压缩

ruby-on-rails - rails 和 Heroku : PG db fails to create database

javascript - Node.js 请求 Node 是否存储 HTTPOnly cookie?

node.js - Nightmare 卡在goto()上

javascript - 如何从另一个 .js 文件添加 Express 路由端点?