Socket IO Web实时推送
1服务器pom.xml引入
<!-- 服务端 -->
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.7</version>
</dependency>
<!-- 客户端 -->
<dependency>
<groupId>io.socket</groupId>
<artifactId>socket.io-client</artifactId>
<version>1.0.0</version>
</dependency>
2:编写服务端程序 ServerDemo.java
package com.gwzx.gwzxyw.socket.test; import org.apache.log4j.Logger; import com.corundumstudio.socketio.AuthorizationListener;
import com.corundumstudio.socketio.Configuration;
import com.corundumstudio.socketio.HandshakeData;
import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.listener.ConnectListener;
import com.corundumstudio.socketio.listener.DisconnectListener;
import com.gwzx.gwzxyw.socket.SocketManager; public class ServerDemo {
private static Logger logger = Logger.getLogger(ServerDemo.class); public static void main(String[] args) {
try {
Configuration config = new Configuration();
config.setHostname("localhost");
config.setPort(9093); //此处做token认证
config.setAuthorizationListener(new AuthorizationListener() {
@Override
public boolean isAuthorized(HandshakeData data) {
System.out.println(data);
return true;
}
}); SocketIOServer server = new SocketIOServer(config); CharteventListener listner = new CharteventListener();
listner.setServer(server);
// chatevent为事件名称
server.addEventListener("chatevent", ChatObject.class, listner); // 连接监听器
server.addConnectListener(new ConnectListener() {
@Override
public void onConnect(SocketIOClient client) {
SocketManager.clietMap.put(client.getSessionId(), client);
logger.info("连接:SessionId=" + client.getSessionId() + ", 总数con:" + SocketManager.clietMap.size());
}
}); // 断开监听器
server.addDisconnectListener(new DisconnectListener() {
@Override
public void onDisconnect(SocketIOClient client) {
// TODO Auto-generated method stub
SocketManager.clietMap.remove(client.getSessionId());
logger.info("断开:SessionId=" + client.getSessionId() + ", 总数dis:" + SocketManager.clietMap.size());
}
}); // 启动服务
server.start();
Thread.sleep(Integer.MAX_VALUE);
server.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
}
消息实体类 ChatObject.java
package com.gwzx.gwzxyw.socket.test;
import java.io.Serializable;
public class ChatObject implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8027556976083577023L;
private String userName;
private String message;
public ChatObject() {
}
public ChatObject(String userName, String message) {
this.userName = userName;
this.message = message;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
事件处理类CharteventListener.java
package com.gwzx.gwzxyw.socket.test; import com.corundumstudio.socketio.AckRequest;
import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.listener.DataListener; public class CharteventListener implements DataListener<ChatObject> { SocketIOServer server; public void setServer(SocketIOServer server) {
this.server = server;
} @Override
public void onData(SocketIOClient client, ChatObject data,
AckRequest ackSender) throws Exception {
// TODO Auto-generated method stub
// chatevent为 事件的名称,data为发送的内容
System.out.println("服务器收到 "+ data.getUserName() +" 消息:"+data.getMessage());
System.out.println("服务器广播消息给borad事件");
data.setMessage("server");
this.server.getBroadcastOperations().sendEvent("broad", data);
} }
3:编写 JAVA 客户端
package com.gwzx.gwzxyw.socket.test; import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter; import org.json.JSONException;
import org.json.JSONObject; public class ClientDemo {
private static Socket socket = null; public static void main(String[] args) {
try {
IO.Options opts = new IO.Options();
opts.query = "token=123456"; //传参数 socket = IO.socket("http://localhost:9093", opts);
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println("客户端连接成功");
JSONObject json = new JSONObject();
try {
json.put("userName", "gmh");
json.put("message", "gmh");
} catch (JSONException e) {
e.printStackTrace();
}
System.out.println("客户端发送测试数据:" + json.toString());
socket.emit("chatevent", json);
}
}).on("broad", new Emitter.Listener() {
@Override
public void call(Object... args) {
JSONObject obj = (JSONObject)args[0];
System.out.println("客户端 收到 服务器broad事件数据:" + obj);
}
}).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println("disconnect");
}
});
socket.connect();
} catch (Exception e){
e.printStackTrace();
}
}
}
4:编写 JS 客户端, 当然需要下载socket.io.js 连接http://www.bootcdn.cn/socket.io/
var socket = io.connect('locahost:9093',{query: 'token=123456'});
socket.on('connect', () => {
console.log("Client connect=====>socket id:" + socket.id);
socket.emit('chatevent', {
userName : "123",
message : "测试"
});
});
socket.on('broad', function (data) {
console.log(data);
});
socket.on('disconnect', function () {
console.log("Client disconnected!");
});
socket.on('reconnect', function () {
console.log("Client reconnected!");
});
socket.on('reconnecting', function () {
console.log("Client reconnecting'!");
});
个人温馨提示:
java中socket.emit(事件, 此处为org.json.JSONObject对象 )
JSONObject 的put数据后, json.toString() 顺序是乱的
Socket IO Web实时推送的更多相关文章
- WEB 实时推送技术的总结
前言 随着 Web 的发展,用户对于 Web 的实时推送要求也越来越高 ,比如,工业运行监控.Web 在线通讯.即时报价系统.在线游戏等,都需要将后台发生的变化主动地.实时地传送到浏览器端,而不需要用 ...
- GoEasy实现web实时推送过程中的自动补发功能
熟悉GoEasy推送的朋友都知道GoEasy推送实现web实时推送并且能够非常准确稳定地将信息推送到客户端.在后台功能中查看接收信息详情时,可有谁注意到有时候在发送记录里有一个红色的R标志?R又代表的 ...
- 【原创】node+express+socket搭建一个实时推送应用
技术背景 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新. 应用场景: 监控系统:后台硬件热插拔.LED.温度.电压发生变化 即 ...
- Spring MVC 实现web Socket向前端实时推送数据
最近项目中用到了webSocket服务,由后台实时向所有的前端推送消息,前端暂时是不可以发消息给后端的,数据的来源是由具体的设备数据收集器收集起来,然后通过socket推送给后端,后端收到数据后,再将 ...
- PHP使用GOEASY实现WEB实时推送
/** * 订单提醒 */ public function sendOrderNotice(){ //请求地址 $uri = "http://goeasy.io/goeasy/publish ...
- 关于 实时推送技术--WebSocket的 知识分享
今天学习了关于WebSocket的知识,觉得挺有用的,在这记录一下,也和大家分享一下!!有兴趣的可以看看哦 WebSocket简介 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达 ...
- 基于socket.io的实时消息推送
用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化, ...
- 基于HTTP协议之WEB消息实时推送技术原理及实现
很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章.本文主要讲解基于 HTTP1.1 协议的 WEB 推送的技术原理及实现.本人曾经在工作的时候也有做过一些用到网页 ...
- Node+Express+MongoDB + Socket.io搭建实时聊天应用
Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...
随机推荐
- ruby -检查json数据类型
HashObj={","language"=>"zh","make"=>"Apple"," ...
- Linux安装python2.7、pip和setuptools
一.说明 CentOS6.5自带python环境为2.6,公司的python环境为2.7. 为了避免出现以后代码出现版本差异,所以把自带的2 .6版本升级到了2.7,过程十分曲折.... 中途遇到的问 ...
- Linux下安装xampp和bugfree
1.BugFree简介 1.1 BugFree的来源 BugFree是借鉴微软的研发流程和Bug管理理念,使用PHP+MySQL独立写出的一个Bug管理系统.简单实用.免费并且开放源代码(遵循GNU ...
- hadoop之 Yarn 调度器Scheduler详解
概述 集群资源是非常有限的,在多用户.多任务环境下,需要有一个协调者,来保证在有限资源或业务约束下有序调度任务,YARN资源调度器就是这个协调者. YARN调度器有多种实现,自带的调度器为Capaci ...
- Linux & Oracle目录说明
/bin:存放着一百多个Linux下常用的命令.工具 /dev:存放着Linux下所有的设备文件! /home:用户主目录,每建一个用户,就会在这里新建一个与用户同名的目录,给该用户一个自己的空间 ...
- RAC3——RAC原理开始
1.RAC并发 RAC的本质是一个数据库,只不过现在这个数据库运行在了多台计算机上,在原先的单实例中,一个进程是否可以修改一条数据,取决于是否有其他进程(同一台计算机上)并发修改.在RAC环境下,这种 ...
- java 设计模式:单例模式
Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯 ...
- jquery ajax 上传文件
html:<!-- /.tab-pane --> <div class="tab-pane" id="head_portrait"> & ...
- Oracle备份提示,EXP-00091: 正在导出有问题的统计信息。
EXP-00091: 正在导出有问题的统计信息 点我,点我~
- REST-assured 2发送文字到接口
获取token https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRECT #java package ...