小编bit*_*ter的帖子

如何分发socket.io

我使用nodejs和socket.io在我的业务应用程序上提供聊天,但我想分发部署,这样我就可以拥有尽可能多的聊天服务器来平衡流量负载。

我尝试了 nginx 的负载平衡方法,但这只是平衡流量,但 socket.io 服务之间的通信并不相同,因此从用户 A 发送到服务器 S1 的一条聊天消息不会传输到服务器 S2 上的用户 B。

有任何工具或方法可以做到这一点。

提前致谢。

=====编辑=====

这是应用程序的架构。

PHP CodeIgniter 上的主应用程序前端可以将其标记为 PHPCI NodeJs 和 SocketIO 上的聊天应用程序后端可以将其标记为 CHAT Redist 上的聊天模型数据可以将其标记为 REDIST

所以我现在拥有的是 PHPCI -> CHAT -> REDIST。那工作得很好。

我需要的是分发应用程序,这样我就可以拥有我想要的尽可能多的 PHPCI 或 CHAT 或 REDIST,例如

 PHPCI1    CHAT1
 PHPCI2 ->       -> REDIST1
 PHPCI3    CHAT2
Run Code Online (Sandbox Code Playgroud)

其中数字代表实例而不是不同的应用程序。

因此,连接到 PHPCI1 的用户 A 可以向连接到 PHPCI3 的用户 B 发送消息。

我认为 CHAT 中间的某个队列可以处理这个问题,比如rabbitmq,它只能使用 SocketIO 将消息传递给客户端。

distributed load-balancing node.js socket.io

3
推荐指数
1
解决办法
1784
查看次数

nginx通配符ssl配置

我为我的网站配置了这个nginx配置,并为我的域使用通配符证书

server {
    server_name *.domain;
    root /var/www;

    index index.php;

    listen *:80;
    listen *:443 ssl http2;
    listen [::]:443 ssl http2;

    # indicate locations of SSL key files.
    ssl_certificate /etc/nginx/ssl/domain.chained.crt;
    ssl_certificate_key /etc/nginx/ssl/domain.key;
    ssl_trusted_certificate /etc/nginx/ssl/domain.crt;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ssl_stapling on;

    # Enable HSTS. This forces SSL on clients that respect it, most modern browsers. The includeSubDomains flag is optional.
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

    # Set caches, protocols, and accepted ciphers. This config will merit an A+ SSL Labs score as of Sept 2015.
    ssl_session_cache …
Run Code Online (Sandbox Code Playgroud)

ssl https wildcard nginx

3
推荐指数
1
解决办法
3724
查看次数

kubectl apply vs kubectl roll-update

如果有一个使用kubectl的用例不应该用于获取滚动更新?

尽管我们给kubectl提供了命令原始意图,但是应用了一个描述集群资源的源文件随着时间的推移而更新,那么有哪些用例不应该使用?

kubernetes kubectl

3
推荐指数
1
解决办法
1903
查看次数

jquery 只在静态和动态元素上触发事件一次

我只需要在页面加载时间或将来动态添加的特定元素上单击一次即可。一些代码

此代码适用于在加载时呈现但不会将单击事件绑定到动态添加的新元素的元素

$(".message-actions .accept").one("click", function(e){
    console.log("accept");
});
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我这样做,它会将事件绑定到新元素,但不会取消绑定事件,因此如果我再次单击它,它将打印相同的控制台日志

$("body").on("click", ".message-actions .accept", function(e){
    console.log("decline");
    $(this).unbind("click");
});
Run Code Online (Sandbox Code Playgroud)

最后,如果我以另一种方式执行此操作,它只会在我单击的第一个元素中触发事件,即使之后加载或添加了多个元素。

$("body").one("click", ".message-actions .accept", function(e){
    console.log("decline");
});
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

谢谢

html javascript jquery

1
推荐指数
1
解决办法
839
查看次数