簡體   English   中英

向客戶端廣播Javascript Websocket服務器消息

[英]Javascript Websocket server message broadcast to clients

我正在嘗試在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"); 

WebClient:

 < 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> 

Android客戶端:

僅使用套接字類及其方法進行進一步處理

               s = new Socket(HOST, TCP_PORT);

請讓我知道如何將通過Websocket服務器從Web客戶端生成的消息傳遞給我的Android客戶端。

我正在使用nodejs進行websocket服務器實現。

謝謝

來自http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76

該協議包括一個初始握手,然后是基於TCP分層的基本消息框架。

因此,僅在客戶端打開一個套接字是不夠的。 也許這會有所幫助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/8125509http://tools.ietf.org/html/rfc6455

我想我讀錯了你的問題。 由於客戶端和服務器之間的連接已經可以使用,因此您只需要轉發消息即可。

首先,您需要確定WebSocket客戶端類型(Android或Web)。 意思是,您立即發送一條消息,說明新打開的WebSocket連接是哪種類型的客戶端,並將該類型的WebSocket(ws)存儲在服務器中。 由於已經標識並存儲了每個WebSocket連接,因此只需將消息轉發給其他類型。

有關更具體的答案,我需要更多信息。

通信應該是雙向的嗎?
是否應該同時存在多個Web和Android連接?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM