【发布时间】:2018-02-03 18:34:10
【问题描述】:
我是 socket.io 的新手,我想在我的网站上使用我的应用程序,该应用程序目前在 HTTPS 上运行,所以实际上我有我的服务器:
var http = require('http').createServer(server),
fs = require('fs'),
io = require('socket.io')(http);
function server(req, res){
fs.readFile('index.html',(err, data)=>{
if(err){
res.writeHead(500,{'Content-Type':'text/html'});
return res.end('<h1>Error</h1>');
} else {
res.writeHead(200,{'Content-Type':'text/html'});
return res.end(data,'utf-8');
}
})
}
http.listen(3000);
console.log("Running server");
io.on('connection', (socket)=>{
socket.emit("hello",{ message : 'Hello world'})
})
客户端索引.html:
<script src="/socket.io/socket.io.js"></script>
<script>
'use strict'
var io = io(),
d = document
io.on('hello', function(data){
console.log(data);
d.querySelector("#hello").innerHTML = data.message;
})
</script>
这在 HTTP 中运行良好,但如何针对 HTTPS 进行修改?
编辑:
根据node docs,我更改了这样的服务器脚本:
var http = require('https'),
fs = require('fs'),
io = require('socket.io')(http);
var options = {
key: fs.readFileSync('myprivkey.pem'),
cert: fs.readFileSync('mycert.pem')
};
http.createServer(options, (req,res)=>{
fs.readFile('index.html',(err, data)=>{
if(err){
res.writeHead(500,{'Content-Type':'text/html'});
return res.end('<h1>Error</h1>');
} else {
res.writeHead(200,{'Content-Type':'text/html'});
return res.end(data,'utf-8');
}
})
}).listen(3000);
console.log("Running server");
io.on('connection', (socket)=>{
socket.emit("hello",{ message : 'Hello world'})
})
我运行服务器并且没有显示错误但客户端无法运行,如果我在浏览器中运行 mysite.com:3000/myapp,控制台会显示:'Uncaught SyntaxError: Unexpected token ' 和'Uncaught TypeError: io is not a function'.
如果我运行 mysite.com/myapp 控制台会说:'GET www.mysite.com/socket.io/socket.io.js 404(未找到)'和'未捕获的 TypeError:io 不是函数'。
我想在输入 mysite.com/myapp 时运行,“myapp”是服务器脚本和客户端 index.html 所在的文件夹名称
还有什么需要修改的?
【问题讨论】:
-
您的域是否有公钥/私钥?你可以在 nodejs.org 上关注the docs。
-
是的,我有我的密钥和证书,我的网站实际上是在 HTTPS 上运行的
-
只需启动 https 服务器而不是 http 服务器,然后将该服务器与 socket.io 一起使用。使用
https模块,而不是http模块。
标签: javascript sockets websocket socket.io