python java web_Python 与 Java 使用 websocket 通信
WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。
Java服务端
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
/**
* @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
* 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
*/
@ServerEndpoint("/websocket")
public class WebSocketTest {
//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
private static int onlineCount = 0;
//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet();
//与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
/**
* 连接建立成功调用的方法
* @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
*/
@OnOpen
public void onOpen(Session session){
this.session = session;
webSocketSet.add(this); //加入set中
addOnlineCount(); //在线数加1
System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(){
webSocketSet.remove(this); //从set中删除
subOnlineCount(); //在线数减1
System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());
}
/**
* 收到客户端消息后调用的方法
* @param message 客户端发送过来的消息
* @param session 可选的参数
*/
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("来自客户端的消息:" + message);
//群发消息
for(WebSocketTest item: webSocketSet){
try {
item.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
continue;
}
}
}
/**
* 发生错误时调用
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error){
System.out.println("发生错误");
error.printStackTrace();
}
/**
* 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
* @param message
* @throws IOException
*/
public void sendMessage(String message) throws IOException{
this.session.getBasicRemote().sendText(message);
//this.session.getAsyncRemote().sendText(message);
}
public static synchronized int getOnlineCount() {
return onlineCount;
}
public static synchronized void addOnlineCount() {
WebSocketTest.onlineCount++;
}
public static synchronized void subOnlineCount() {
WebSocketTest.onlineCount--;
}
}
Python客户端
安装依赖 pip install websocket-client
import websocket
try:
import thread
except ImportError:
import _thread as thread
import time
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
def on_open(ws):
def run(*args):
for i in range(3):
time.sleep(1)
ws.send("Hello %d" % i)
time.sleep(1)
ws.close()
print("thread terminating...")
thread.start_new_thread(run, ())
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://127.0.0.1:8080/websocket",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
python java web_Python 与 Java 使用 websocket 通信相关推荐
- python websocket_python 模拟websocket通信
以前,很多网站使用轮询实现推送技术.轮询是在特定的的时间间隔(比如1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给浏览器.轮询的缺点很明显,浏览器需要不断的向服务器发 ...
- 学python和java哪个难?,java和python哪个难学
java和python哪个好学 ①python比Java简单,学习成本低,开发效率高;②Java运行效率高于python,尤其是纯python开发的程序,效率极低;③Java相关资料多,尤其是中文资料 ...
- java/web/springboot项目使用WebSocket消息推送
java/web/springboot项目使用WebSocket消息推送 最近项目中,有消息推送的广播和在线咨询的功能,以前也没搞过啊,有些小伙伴估计也是,那肯定要赶紧学习起来啊~ 不说废话,今天就告 ...
- php和python和java-python与java区别
Python和Java都是很火的编程语言,对于想学习编程的人员来说,常常被这个问题所困扰:我是该学Python还是Java呢?想要解决这个问题,还需结合自身实际情况和两种语言的特点进行分析. 以下是P ...
- java和python工资-python为什么叫爬虫 python工资高还是java的高
人工智能的现世,让python学习成风,由于其发展前景好,薪资高,一时成为众多语言的首选.Python是一门非常适合开发网络爬虫的编程语言,十分的简洁方便所以是网络爬虫首选编程语言!不少新手常问pyt ...
- python程序员薪资-python工资高还是java?
说起来,随着人工智能和大数据逐渐进入人们的眼中,越来越多的人看到互联网未来大好发展趋势,而想要学习一门技术来进入其中,以期分一杯羹.但是,作为人工智能和大数据的重要编程语言,Python和Java,该 ...
- php和python和java-python和java,php,c,c#,c++的对比
1.C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言.C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素.C++在这方面做了改进,在保 ...
- python真的超过java了吗-JAVA会被Python超越成为世界上第一大编程语言吗?
关键时刻,第一时间送达! 这个路还还长,暂时不会,未来5年不会,10年有可能,就看现在小学生.初中生学习的怎么样.最近,也在观注这方面的,偶尔看到新闻说python纳入到高考中,想想如果真纳入了,过4 ...
- java面试题44关于 Socket 通信编程,以下描述正确的是:( )
java面试题44关于 Socket 通信编程,以下描述正确的是:( ) A 客户端通过new ServerSocket()创建TCP连接对象 B 客户端通过TCP连接对象调用accept()方法创建 ...
最新文章
- 倒计时两天丨NeurIPS 2020预讲会:7位智源青年科学家,21场报告
- python白名单验证-python脚本简单检测ip合法性并添加到白名单文件
- php固定空格,使用php校对(固定标点符号,空格,大写字母)生物页面文本
- antd 能自适应吗_自首要满足的条件有哪些,自首能从宽处罚吗?
- 【编撰】HDS, HLS,HLS-ABR, HSS — Adaptive HTTP Streaming Demystified
- day10【过渡】分布式理论
- Win7原版|MSDN Windows7 SP1官方原版ISO镜像下载(全版本)
- NRF24L01入门总结
- Cisco(思科)无线路由器
- SpringBoot中使用MyBatis-Plus是如何解决Invalid bound statement (not found)这个异常的
- 艺多不压身 -- 目录
- 推荐几款电脑测试软件
- 任务栏中间的活动窗口图标不见了怎么办
- 应对羊毛党的老手段不管用了,但有些公司依然有办法,他们是怎么做的?
- sed删除代码空行和删去行尾空白
- 代谢组学分析常用网站
- linux里gdb配置插件peda, gef, gdbinit
- Flask扩展包安装出现错误:Could not find a version that satisfies the requirement ...
- 磁学基础 永久磁铁的磁力线分布
- [BC#89B]Fxx and game