网站首页 > 技术文章 正文
首先,什么是WebSocket,有兴趣的朋友可以看看这里:http://zh.wikipedia.org/zh-cn/WebSocket
对WebSocket有了基本认识后,我们可以着手开发WebSocket应用程序,推荐使用Maven搭建项目。我使用的服务器是Tomcat 7.0.56(Tomcat 7或者更高版本才能使用WebSocket,而且至少是7.0.47以上版本才支持, LZ一开始用7.0.41部署没有成功...)。WebSocket 还需要javaee7的支持,所以在pom.xml中需要引用一下jar:
<span style="white-space:pre"> </span><dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.0</version> <scope>provided</scope> </dependency> <!-- 增加fastjson-1.1.34.jar --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.34</version> </dependency>
因为Tomcat自带了websocket-api,所以项目中的websocket-api是provided,方便编译。
接着可以编写服务端的WebSocket程序,示例代码:
package com.jiepu.visuallab.web.servlet;
import com.alibaba.fastjson.JSON;
import com.jiepu.visuallab.common.C;
import com.jiepu.visuallab.common.bean.SocketReply;
import com.jiepu.visuallab.common.tools.HostTools;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
*
* Created by zengxm on 2014/11/4.
*/
@ServerEndpoint("/websocket/test")
public class HostWebSocketServlet {
private static Map<String, Session> sessions = new HashMap<String, Session>();
public HostWebSocketServlet(){
System.out.println("--------------------------------------");
}
/**
* 向客户端群发信息
* @param category
* @param data
*/
public synchronized static void sendAll(String category, Object data){
SocketReply re = new SocketReply(category, data);
String replyStr = JSON.toJSONString(re);
System.out.println("开始群发信息!");
Set<String> keys = sessions.keySet();
for(String k:keys){
Session s = sessions.get(k);
if(s.isOpen()){
try{
s.getBasicRemote().sendText(replyStr);
System.out.println("发送成功, id="+k);
}catch(Exception e){
System.err.println("发送出错:"+e.getMessage());
}
}
}
}
@OnMessage
public void onMessage(Session session, String msg){
System.out.println("收到信息");
try {
session.getBasicRemote().sendText("get");
}catch (Exception e){
e.printStackTrace();
}
}
@OnOpen
public void onOpen(Session session, EndpointConfig config){
try {
sessions.put(session.getId(), session);
SocketReply re = new SocketReply(C.HOST_DATA, HostTools.getHostList());
String replyStr = JSON.toJSONString(re);
session.getBasicRemote().sendText(replyStr);
}catch (Exception e){
e.printStackTrace();
}
}
@OnError
public void onError(Session session, Throwable throwable){
}
@OnClose
public void onClose(Session session, CloseReason reason){
try {
System.out.println("断开连接, id="+session.getId());
synchronized (sessions){
sessions.remove(session.getId());
}
}catch (Exception e){
e.printStackTrace();
}
}
}
在html页面中可以这样连接到上面定义好的WebSocket:
var url = "ws://"+document.location.host+"${base}/websocket/test";
var ws = new WebSocket(url);
ws.onopen = function(e){
console.log("ws connect Success!");
HostUtil.start();
HostConsole.init();
listeners.push(HostConsole);
}
ws.onmessage = function(evt){
console.log("ws get:"+evt.data);
}
上面代码中的${base}就是项目名称,替换成实际的路径即可。
将项目部署到tomcat,运行之,在console可以看到连接信息:
总结:
1. 如果环境都搭建好了,运行项目也没报错,但是连接不了WebSocket(js端报404错误),可以看看是不是jar冲突了。就是项目lib里面是不是有websocket-api相关的jar,有的话要删除,不然会跟tomcat自带的websocket冲突,导致服务端程序没有执行。
猜你喜欢
- 2024-10-13 websocket-sharp:.NET平台上的WebSocket客户端与服务器开源库
- 2024-10-13 dart系列之:实时通讯,在浏览器中使用WebSockets
- 2024-10-13 WebSocket菜鸟教程二(websocketpp教程)
- 2024-10-13 建立一个加密货币的教程(一)(制作加密货币)
- 2024-10-13 WebSocket 对象简介(websocket相关技术)
- 2024-10-13 netty系列之:使用netty搭建websocket客户端
- 2024-10-13 聊聊分布式下的WebSocket解决方案
- 2024-10-13 OkHttp 实现 WebSocket 真的太好用了,聊聊长连接如何保活
- 2024-10-13 WebSocket基础讲解(1)(websocketclient)
- 2024-10-13 利用WebSocket跨站劫持(CSWH)漏洞接管帐户
- 11-22西数硬盘低级格式化工具(西部硬盘格式化)
- 11-22组装电脑如何选配置(组装电脑怎样选配置)
- 11-22服务器ip地址在哪里看(服务器ip地址在哪里看 固定IP)
- 11-22如何关掉防火墙(电脑如何关闭防火墙)
- 11-22w8系统不激活会怎么样(win8.1不激活能用多久)
- 11-22宏基笔记本哪个系列好(宏基笔记本值得入手吗)
- 11-22笔记本cpu性能排行榜天梯图(笔记本cpu排行天梯图知乎)
- 11-22windows xp怎么升级到windows7
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (77)
- vector线程安全吗 (73)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)
