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实时推送的更多相关文章

  1. WEB 实时推送技术的总结

    前言 随着 Web 的发展,用户对于 Web 的实时推送要求也越来越高 ,比如,工业运行监控.Web 在线通讯.即时报价系统.在线游戏等,都需要将后台发生的变化主动地.实时地传送到浏览器端,而不需要用 ...

  2. GoEasy实现web实时推送过程中的自动补发功能

    熟悉GoEasy推送的朋友都知道GoEasy推送实现web实时推送并且能够非常准确稳定地将信息推送到客户端.在后台功能中查看接收信息详情时,可有谁注意到有时候在发送记录里有一个红色的R标志?R又代表的 ...

  3. 【原创】node+express+socket搭建一个实时推送应用

    技术背景 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新. 应用场景: 监控系统:后台硬件热插拔.LED.温度.电压发生变化 即 ...

  4. Spring MVC 实现web Socket向前端实时推送数据

    最近项目中用到了webSocket服务,由后台实时向所有的前端推送消息,前端暂时是不可以发消息给后端的,数据的来源是由具体的设备数据收集器收集起来,然后通过socket推送给后端,后端收到数据后,再将 ...

  5. PHP使用GOEASY实现WEB实时推送

    /** * 订单提醒 */ public function sendOrderNotice(){ //请求地址 $uri = "http://goeasy.io/goeasy/publish ...

  6. 关于 实时推送技术--WebSocket的 知识分享

    今天学习了关于WebSocket的知识,觉得挺有用的,在这记录一下,也和大家分享一下!!有兴趣的可以看看哦 WebSocket简介 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达 ...

  7. 基于socket.io的实时消息推送

    用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化, ...

  8. 基于HTTP协议之WEB消息实时推送技术原理及实现

    很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章.本文主要讲解基于 HTTP1.1 协议的 WEB 推送的技术原理及实现.本人曾经在工作的时候也有做过一些用到网页 ...

  9. Node+Express+MongoDB + Socket.io搭建实时聊天应用

    Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...

随机推荐

  1. 树莓派的媒体播放软件omxplayer

    树莓派中的CPU性能较差,而GPU较强大.omxplayer是专门针对树莓派的GPU的播放器.( made by Edgar (gimli) Hucek from the XBMC/Kodi proj ...

  2. 基于 FastAdmin 开发后台流程 (持续更新)

    使用 git init 初始化 增加一个自己的git 原始仓库,用于存放自己的代码. 增加一个 fastadmin 的仓库,为了方便以后与官方同步. 自己修改的代码 git Push 到自己的仓库 将 ...

  3. HTML5 localStorage使用教程

    在客户端存储数据,HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前, ...

  4. centos6 yum安装最新版mysql5.7

    在看来mysql5.7诸多改进介绍后,决定也安装一个试用下:本文将使用rpm的方式来安装. 环境:OS: CentOS6.5 x86_64 最小化安装MEM: 1GCPU: 1 1. 本文连着上一篇安 ...

  5. Win7 搭建pptpvpn服务器方法

    打开网络与共享中心 选择更改适配器设置 选择菜单文件选项(若无菜单栏,可以按一下alt键就会显示出来的) 选择新建传入链接 选择需要哪些用户可以访问vpn服务器,把勾搭上,点击下一步 注意此处的通过i ...

  6. 使用纯生js操作cookie

    前段时间做项目的时候要使用js操作cookie,jquery也有相应的插件,不过还是觉得纯生的js比较好,毕竟不依赖jq. //获得coolie 的值 function cookie(name) { ...

  7. 码出高效,阿里巴巴JAVA开发手册1.4.0

    码出高效,阿里巴巴JAVA开发手册1.4.0阅读笔记 一.编程规约(三) 代码格式// 关键词if与括号之间必须有一个空格,括号内的f与左括号,0与右括号不需要空格 if (flag == 0) { ...

  8. webstorm打开后无法显示文件夹目录

    最近接触webstorm,上午研究怎么删除项目,不小心把项目在目录中删除了,然后重新创建时,无法显示了. 状况类似这样的 百度上搜了一些没搜到,关键字是“webstorm 项目 目录 无法显示文件夹” ...

  9. 异步FIFO空满设计延迟问题

    由于设计的时候读写指针用了至少两级寄存器同步,同步会消耗至少两个时钟周期,势必会使得判断空或满有所延迟,这会不会导致设计出错呢? 异步FIFO通过比较读写指针进行满空判断,但是读写指针属于不同的时钟域 ...

  10. SpringCloud使用jpa之传统方式

    不说废话,直接上代码: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xml ...