在考慮下socket 之間叢集 可以在Nginx 下可以 但是不同伺服器之間怎麼通訊呢 後來自己也想可不可以用什麼東西或者中間件來通訊 ,後來在百度之下 發現果然就是按照我所想的 ,在網上看了一個方案,架構如下:

說一下這個方案他們之間的作用
redis : 存取使用者和伺服器的關系,如果A想發一條資料,是發給B ,這時A發起一個mq訂閱模式推送的資料 ,然後B收到資料處理好 ,在推送給使用者就ok
mq : 是了橋接A和B 的之間的通訊
這樣A和B之間通訊就沒有問題了
以下是搭建過程
首先配置好nginx ,可以百度下載下傳和安裝 ,我的路徑是如下 打開配置nginx.conf vim nginx.conf 配置如下
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream ws_name {
server 127.0.0.1:12345 weight=1; ## weight 權重越大越大擷取連結機會就越大
server 127.0.0.1:12346 weight=1;
}
server {
listen 9999;
server_name localhost;
location / {
proxy_pass http://ws_name/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
### 以下配置是為了解決在nginx 下 socket 短時間的斷開 ,即使你配置長連結也沒用 必須有如下的配置
proxy_connect_timeout 4s;
proxy_read_timeout 600s; #這個配置連接配接保持多長時間 這配置十分鐘 ,然後可以自己心跳來保證長連結
proxy_send_timeout 12s;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
以上是nginx的配置 然後啟動就ok 啟動 指令 :./nginx
檢視是否啟動 指令 ps -ef |grep nginx
然後 mq 我的mq是 activemq 這個可以百度看看怎麼安裝 ,因為這個安裝比較簡單是以就不說太多了
接下來是代碼的實作了 :
package com.yw.socket;
import com.yw.mq.Producer;
import com.yw.redis.JedisUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.*;
import io.netty.channel.group.ChannelGroup;
import io.netty.handler.codec.http.DefaultFullHttpResponse;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.handler.codec.http.HttpVersion;
import io.netty.handler.codec.http.websocketx.*;
import io.netty.util.CharsetUtil;
import javax.jms.JMSException;
import java.util.Date;
import java.util.Iterator;
public class SocketServerHandler extends SimpleChannelInboundHandler {
private String URLSTR="ws://%s:%s/%s";
private String ws="";
private String port="";
private WebSocketServerHandshaker handshaker;
public SocketServerHandler(String url,String port,String name){
ws = String.format(URLSTR, url,port,name);
this.port=port;
}
public SocketServerHandler(String port,String name){
this("127.0.0.1