我正在尝试使socket.io同时工作http
和https
连接,但似乎我的配置它只能在其中一个上工作.
使用下面的配置选项socket.io可以通过访问我的应用程序https
,但是当试图通过常规访问时http
它无法连接并且我收到错误.
var app = express()
, http= require('http').createServer(app)
, https = require('https').createServer(options, app)
, io = require('socket.io').listen(https, { log: false })
Run Code Online (Sandbox Code Playgroud)
后来我有了这个
http.listen(80, serverAddress);
https.listen(443, serverAddress);
Run Code Online (Sandbox Code Playgroud)
在客户端我有这个:
<script src='/socket.io/socket.io.js'></script>
var socket = io.connect('https://<%= serverAddress %>', {secure: true, 'sync disconnect on unload' : true});
Run Code Online (Sandbox Code Playgroud)
当然,如果我分别用服务器和客户端的功能.listen
和https选项切换http,.connect
我会得到相反的结果.Socket.io可以通过http访问,而不是通过https访问.
怎么可能实现这个目标?我需要它主要是因为它是关于Facebook应用程序,所以它必须根据Facebook规则提供http和https连接选项.
编辑:如果它有助于解决问题,我收到的错误如下
Failed to load resource: the server responded with a status of 404 (Not Found) http://DOMAIN/socket.io/socket.io.js
Run Code Online (Sandbox Code Playgroud)
因此,我得到其他如下:
Uncaught ReferenceError: io is not …
Run Code Online (Sandbox Code Playgroud) 问题如下:
如果您使用addthis(分享按钮)查看任何网站...
一旦你浮动addthis按钮,所有所需的资产加载使用firebug或chrome检查器(不是源,屏幕上的实际文档......对象检查器)查看文档的主体.你会注意到addthis自动加载的附加资产看起来像这样:
<script type="text/javascript" src="//s7.addthis.com/static/r07/menu78.js"></script>
<link rel="stylesheet" type="text/css" href="//s7.addthis.com/static/r07/widget61.css" media="all">
Run Code Online (Sandbox Code Playgroud)
在上面的标签中http://的简短处理是什么?
以前有人用过吗?它有'官方'名称吗?如何跨浏览器兼容这种简短处理http协议的方法?
是的,我知道这会破坏爬虫/ seo的东西,但我正在考虑开始在无法访问(主要是,js处理的东西)机器人的情况下使用它.
好的还是坏的?
根据 Socket IO 文档,我可以使用 http,但不能使用 https。我正在使用带有 http 集群的套接字 io,它工作正常,但当我在其上实现 https 时却无法工作。
我正在使用的套接字 IO 文档:- https://socket.io/docs/v4/cluster-adapter/
我的代码是
const cluster = require("cluster");
const https = require("https");
var fs = require("fs");
const { Server } = require("socket.io");
const numCPUs = require("os").cpus().length;
const { setupMaster, setupWorker } = require("@socket.io/sticky");
const { createAdapter, setupPrimary } = require("@socket.io/cluster-adapter");
const sslOptions = {
key: fs.readFileSync("security/cert.key"),
cert: fs.readFileSync("security/cert.pem")
};
const options = { cors: true, origins: "*" };
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
const httpServer = …
Run Code Online (Sandbox Code Playgroud) 我正在使用简单的 socket.io 2.0.3 服务器,没有 express 或任何类似的东西来在我的 Laravel 应用程序中运行简单的聊天功能。
一切都运行良好,直到我决定将网站切换到 HTTPS。现在 socket.io 拒绝连接(ERR_CONNECTION_CLOSED)。
这是我最简单的设置:
服务器.js:
var io = require('socket.io')(8080, {
origins : //some stuff
});
Run Code Online (Sandbox Code Playgroud)
HTML文件
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
var socket = io(':8080');
//more stuff
Run Code Online (Sandbox Code Playgroud)
我在服务器文件夹、intermediate.crt、domain.com.crt 和 domain.com.key 中有所有需要的证书文件
有人可以用最简单的例子来帮助如何在 https 上进行这项工作吗?提前致谢!
编辑:需要不使用 Express 的可能解决方案。
我之前有一个Socket.io脚本在http上运行正常,但升级到https已经打破了它.我在服务器上安装了证书,但没有运气.服务器设置的代码是:
var https = require('https'),
fs = require('fs');
var options = {
key: fs.readFileSync('/etc/nginx/ssl/default/54082/server.key'),
cert: fs.readFileSync('/etc/nginx/ssl/default/54082/server.crt')
};
var app = https.createServer(options);
var io = require('socket.io').listen(app);
Run Code Online (Sandbox Code Playgroud)
但是,在Web浏览器中,页面无法连接到该页面,并且控制台显示the server responded with a status of 502 (Bad Gateway)
响应.
关于脚本设置是否错误的任何想法?或者也许是Nginx设置中的某些东西?
非常感谢
编辑:我用来连接的前端代码:
<script type="text/javascript" src="https://socket.example.com/socket.io/socket.io.js"></script>
<script>
var io = io('https://socket.example.com', { secure: true });
</script>
Run Code Online (Sandbox Code Playgroud)
编辑:: Nginx配置:
# FORGE CONFIG (DOT NOT REMOVE!)
include forge-conf/socket.example.co.uk/before/*;
server {
listen 443 ssl;
server_name socket.example.co.uk;
root /home/forge/socket.example.co.uk;
# FORGE CONFIG (DOT NOT REMOVE!)
include …
Run Code Online (Sandbox Code Playgroud)