[英]WebSocket connection with nodejs express
我正在嘗試使用 express 連接到 websocket,但它無法連接。 我正在嘗試使用 WebSocket 向 HTML 頁面發送消息。
我的服務器端
var expressWs = require('express-ws')(app);
app.ws('/echo', function (ws, req) {
ws.on('message', function (msg) {
ws.send(msg);
});
});
代碼
<script language="javascript" type="text/javascript">
var form;
var websocket;
function init() {
form = document.getElementById("isyeribul");
websocket = new WebSocket("ws://localhost:8080/");
websocket.onopen = function(evt) {
console.log("CONNECTED");
};
websocket.onmessage = function(event) {
form.style.display = "none";
};
}
window.addEventListener("load", init, false);
function sendfunc(){
var text=document.getElementById("txt1").value;
websocket.send(text);
console.log(text+ " sent");
}
</script>
控制台輸出
isyeriara:30 WebSocket is already in CLOSING or CLOSED state.
來自這個文檔: https : //developer.mozilla.org/en-US/docs/Web/API/WebSocket/readyState
websocket.readyState
有 4 個狀態:
來自這個文檔: https : //developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications
由於建立連接是異步的並且容易失敗,因此不能保證在創建 WebSocket 對象后立即調用 send() 方法會成功。 我們至少可以通過定義一個 onopen 事件處理程序來確保只有在建立連接后才會嘗試發送數據
這是一個最小的工作示例:
app.js
:
const express = require('express');
const path = require('path');
const app = express();
require('express-ws')(app);
app.get('/', (req, res) => {
res.sendFile(path.resolve(__dirname, './public/index.html'));
});
app.ws('/echo', function(ws, req) {
ws.on('message', function(msg) {
ws.send(msg);
});
});
const port = 8080;
app.listen(port, () => {
console.info(`HTTP server is listening on http://localhost:${port}`);
});
./public/index.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<main>
<form id="isyeribul"><input id="txt1" value="websocket example" type="search" placeholder="search" /></form>
</main>
<script>
var form;
var websocket;
function init() {
form = document.getElementById('isyeribul');
websocket = new WebSocket('ws://localhost:8080/echo');
websocket.onopen = function(evt) {
console.log('CONNECTED');
sendfunc();
};
websocket.onmessage = function(event) {
form.style.display = 'none';
};
}
window.addEventListener('load', init, false);
function sendfunc() {
var text = document.getElementById('txt1').value;
websocket.send(text);
console.log(text + ' sent');
}
</script>
</body>
</html>
瀏覽器console
的結果:
websocket example sent
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.