【问题标题】:Javascript Websocket server message broadcast to clientsJavascript Websocket 服务器消息广播到客户端
【发布时间】:2016-02-24 17:33:30
【问题描述】:

我正在尝试在 javascript 中创建一个虚拟 websocket 服务器,以向我的 android 客户端应用程序发送一些消息。消息将使用 html 页面 (javascript) 注入服务器,该页面将进一步传递到 android 客户端。我能够将这两个客户端(web 和 android)分别与服务器连接,但是,无法实现我想要的流程,即基于 Web 的 javascript 将消息发送到正在运行的 Nodejs websocket 服务器,该服务器将此消息广播到 android 客户端。

这是我用于服务器端的代码

var WebSocketServer = require("ws").Server;
var http = require("http");
var express = require("express");
var port = 2001;

var app = express();
app.use(express.static(__dirname + "/../"));
app.get('/someGetRequest', function(req, res, next) {
  console.log('receiving get request');
});
app.post('/somePostRequest', function(req, res, next) {
  console.log('receiving post request');
});
app.listen(80); //port 80 need to run as root

console.log("app listening on %d ", 80);

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

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

var userId;
var wss = new WebSocketServer({
  server: server
});
wss.on("connection", function(ws) {
  console.info("websocket connection open");

  var timestamp = new Date().getTime();
  userId = timestamp;

  ws.send(JSON.stringify({
    msgType: "onOpenConnection",
    msg: {
      connectionId: timestamp
    }
  }));


  ws.on("message", function(data, flags) {
    console.log("websocket received a message");
    var clientMsg = data;

    ws.send(JSON.stringify({
      msg: {
        connectionId: userId
      }
    }));
    console.log(clientMsg);

  });

  ws.on("close", function() {
    console.log("websocket connection close");
  });
});
console.log("websocket server created");

网络客户端:

< script type = "text/javascript" >
  var websocketURL = 'ws://localhost:2001/';

function startWebSocket() {
  try {
    ws = new WebSocket(websocketURL);
  } catch (e) {
    alert("Unable to connect to webserver")
  }
}

function sendMessage(text) {
  var message = 'Test message from webclient: ' + text;
  ws.send(message);
  alert(message);
}

startWebSocket(); < /script>
        
        <button onclick="sendMessage('From button1')">Button 1</button > < br >
  < button onclick = "sendMessage('From button2')" > Button 2 < /button><br>

安卓客户端:

只是使用socket类及其方法做进一步处理

               s = new Socket(HOST, TCP_PORT);

请告诉我如何通过 websocket 服务器将 web 客户端生成的消息传递给我的 android 客户端。

我正在使用 nodejs 来实现 websocket 服务器。

谢谢

【问题讨论】:

    标签: javascript android node.js sockets websocket


    【解决方案1】:

    我想我看错了你的问题。由于客户端和服务器之间的连接已经正常,您只需转发消息即可。

    首先,您需要识别 WebSocket 客户端类型(Android 或 Web)。这意味着,您立即发送一条消息,新打开的 WebSocket 连接是什么类型的客户端,并将该类型的 WebSocket (ws) 存储在服务器中。由于您已经识别并存储了每个 WebSocket 连接,因此您只需将消息转发到其他类型。

    如需更具体的答案,我需要更多信息。

    通信应该是双向的吗?
    是否应该同时有多个 Web 和 Android 连接?

    【讨论】:

      【解决方案2】:

      来自https://datatracker.ietf.org/doc/html/draft-hixie-thewebsocketprotocol-76

      该协议由初始握手组成,然后是基本的消息帧,在 TCP 上分层。

      所以,仅仅在客户端打开一个 Socket 是不够的。也许这会有所帮助https://stackoverflow.com/a/4292671

      另外看看http://www.elabs.se/blog/66-using-websockets-in-native-ios-and-android-apps章节Android客户端

      如果你真的想自己实现 WebSocket 的东西,看看https://stackoverflow.com/a/8125509https://www.rfc-editor.org/rfc/rfc6455

      【讨论】:

        猜你喜欢
        • 2018-11-14
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        • 2017-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-02
        相关资源
        最近更新 更多