Server
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.16</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.2</version>
</dependency>
public class ServerStart {
public static void main(String [] args){
Configuration config = new Configuration();
config.setHostname("localhost");
config.setPort(9999);
SocketIOServer server = new SocketIOServer(config);
server.addConnectListener(new ConnectListener() {
// 添加客户端连接监听器
public void onConnect(SocketIOClient client) {
//logger.info(client.getRemoteAddress() + " web客户端接入");
//不知道如何与客户端对应,好的办法是自己去写对应的函数
client.sendEvent("connected", "hello");
}
});
//监听客户端事件,client_info为事件名称,-自定义事件
server.addEventListener("client_info", String.class, new DataListener<String>(){
public void onData(SocketIOClient client, String data, AckRequest ackRequest) throws ClassNotFoundException {
//客户端推送advert_info事件时,onData接受数据,这里是string类型的json数据,还可以为Byte[],object其他类型
String sa = client.getRemoteAddress().toString();
String clientIp = sa.substring(1,sa.indexOf(":"));//获取客户端连接的ip
Map params = client.getHandshakeData().getUrlParams();//获取客户端url参数
System.out.println(clientIp+":客户端:************"+data);
}
});
//添加客户端断开连接事件
server.addDisconnectListener(new DisconnectListener(){
public void onDisconnect(SocketIOClient client) {
String sa = client.getRemoteAddress().toString();
String clientIp = sa.substring(1,sa.indexOf(":"));//获取设备ip
System.out.println(clientIp+"-------------------------"+"客户端已断开连接");
//给客户端发送消息
client.sendEvent("advert_info",clientIp+"客户端你好,我是服务端,期待下次和你见面");
}
});
server.start();
while (true){
try {
Thread.sleep(1500);
//广播消息
server.getBroadcastOperations().sendEvent("borcast","are you live?");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Client
<dependency>
<groupId>io.socket</groupId>
<artifactId>socket.io-client</artifactId>
<version>1.0.0</version>
</dependency>
public class AppStart {
public static void main(String [] args){
String url ="http://localhost:9999";
try{
IO.Options options = new IO.Options();
options.transports = new String[]{"websocket"};
options.reconnectionAttempts = 2;
options.reconnectionDelay = 1000;//失败重连的时间间隔
options.timeout = 500;//连接超时时间(ms)
//par1 是任意参数
final Socket socket = IO.socket(url+"?par1=1234", options);
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
public void call(Object... args) {
socket.send("hello");
}
});
//自定义事件
socket.on("borcast", new Emitter.Listener() {
public void call(Object... objects) {
System.out.println("receive borcast data:" + objects[0].toString());
}
});
socket.on("connected", new Emitter.Listener() {
public void call(Object... objects) {
System.out.println("receive connected data:" + objects[0].toString());
}
});
socket.connect();
//循环发送数据
while (true){
socket.emit("client_info"," 客户端在发送数据");
Thread.sleep(2000);
}
}catch (Exception ex){
ex.printStackTrace();
}
}
}
VUE
https://www.npmjs.com/package/vue-socket.io
import VueSocketIO from 'vue-socket.io'
import SocketIO from 'socket.io-client'
Vue.use(new VueSocketIO({
debug: true,
connection: SocketIO('http://192.168.88.108:443', {
path: '', // path千万不要写“/”
transports: ['websocket', 'xhr-polling', 'jsonp-polling']
}) // options object is Optional
}))
Other https://github.com/probil/vue-socket.io-extended
import Vue from 'vue'
import VueSocketIOExt from 'vue-socket.io-extended'
import SocketIO from 'socket.io-client';
const socket = SocketIO('https://localhost');
export default ({ store }) => {
Vue.use(VueSocketIOExt, socket, { store });
}
sockets: {
// 创建连接
connect() {
console.log('连接成功啦')
},
// 监听断开连接,函数
disconnect() {
console.log('断开服务器连接');
this.connectdisabled = false;
this.leavedisabled = true;
this.senddisabled = true;
this.inputdisabled = true;
},
reconnect() {
console.log("重新链接");
},
// 监听自定义事件,需与服务端emit事件名一致
joined(room, id) {
console.log('joined',room, id)
this.connectdisabled = true;
this.leavedisabled = false;
this.senddisabled = false;
this.inputdisabled = false;
},
//发送加入信令
this.$socket.client.emit('join', this.room)