我正在尝试演示HTML5 websocket的使用。以下代码使用WebSocket.org回显服务器工作。但我正在寻找连接到不同的资源。例如,我可以使用putty/telnet连接到端口:2628上的字典服务器"dict.org"并查找单词。所以我的问题是我可以使用WebSocket连接到这种类型的资源,如果是这样,如何?谢谢你。
<pre>
window.onload = function () {
var btnConnect = document.getElementById("btnConnect");
var btnDisconnect = document.getElementById("btnDisconnect");
var btnSend = document.getElementById("btnSend");
btnConnect.onclick = function () {
socket = new WebSocket("ws://echo.websocket.org/");
//socket = new WebSocket('ws://dict.org:2628');
outPut("Connecting...");
socket.onopen = function () {
outPut("Socket Connection Established.");
}
socket.onclose = function () {
outPut("Socket Closed.");
}
socket.onmessage = function (evt) {
outPut("[Server Msg]: " + evt.data);
}
socket.onerror = function (err) {
outPut("[Error]: " + err.data);
}
btnDisconnect.onclick = function () {
if (socket.readyState != WebSocket.OPEN) return;
outPut("Disconnected...");
socket.close();
}
btnSend.onclick = function () {
if (socket.readyState != WebSocket.OPEN) return;
var strClient = document.getElementById("strClient").value;
socket.send(strClient);
outPut("[Client Msg]: " + strClient);
}
}
}
function outPut(str) {
var txtServer = document.getElementById("txtServer");
txtServer.value += "n " + str;
}
</pre>
我可以使用WebSocket连接到这种类型的资源,如果是,如何?
不直接。是用WebSocket到纯TCP代理。
打开WS连接需要升级HTTP连接。当你要求浏览器打开一个WS连接时,它会向HTTP服务器(Apache、nginx等)发送一个Upgrade命令,它会将连接重定向到你配置的WS服务器。后者可以用Python、node.js、C等语言编写,需要理解并遵循WebSocket协议。
如果你想通过WS与dict.org通信,我的建议是创建一个WS代理服务器,它从WS端接收命令,将它们转换为dict.org:2628上的纯文本TCP请求,然后将答案转发回客户端。