我正试图用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>
安卓客户端:
只需使用socket类及其方法对进行进一步处理
s = new Socket(HOST, TCP_PORT);
请让我知道如何通过websocket服务器将web客户端生成的消息传递给我的android客户端。
我正在使用nodejs来实现websocket服务器。
感谢
来源https://datatracker.ietf.org/doc/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/8125509和https://www.rfc-editor.org/rfc/rfc6455
我想我误解了你的问题。由于客户端和服务器之间的连接已经工作,您只需要转发消息。
首先,您需要识别WebSocket客户端类型(Android或Web)。也就是说,您立即发送一条消息,新打开的WebSocket连接是什么类型的客户端,并将该类型的WebSocket(ws)存储在服务器中。由于您已经识别并存储了每个WebSocket连接,因此您只需将消息转发到另一种类型。
关于更具体的答案,我需要更多的信息。
沟通应该是双向的吗
是否应该同时有多个web和Android连接?