Java 与 QtQuick 之 WebSocket
来源:互联网 发布:如何将数据转换成图表 编辑:程序博客网 时间:2024/06/05 03:49
Java 与 QtQuick 之 WebSocket
WebSocket 是一种新的 HTML5 协议,它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成握手。
直接上代码,Java 端:
package org.gdpurjyfs.websocket;import java.io.IOException;import java.util.concurrent.CopyOnWriteArraySet;import javax.websocket.CloseReason;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;@ServerEndpoint("/websocket")public class WebSocketServer { //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 private static int onlineCount = 0; //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识 private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>(); //与某个客户端的连接会话,需要通过它来给客户端发送数据 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(CloseReason reason){ webSocketSet.remove(this); //从set中删除 subOnlineCount(); //在线数减1 System.out.println("关闭原因是:"+reason.getReasonPhrase()); System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount()); } /** * 收到客户端消息后调用的方法 * @param message 客户端发送过来的消息 * @param session 可选的参数 */ @OnMessage public void onMessage(String message, Session session) { System.out.println("来自客户端的消息:" + message); //群发消息 for(WebSocketServer item: webSocketSet){ try { item.sendMessage(item.session.getId()+": "+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() { WebSocketServer.onlineCount++; } public static synchronized void subOnlineCount() { WebSocketServer.onlineCount--; }}
QtQuick 端:
import QtQuick 2.5import QtQuick.Window 2.2import QtQuick.Controls 1.4import Qt.WebSockets 1.0Window { visible: true WebSocket { id: webScoket url: "ws://localhost:8080/JavaWebSocket/websocket" active: true onStatusChanged: { console.log(status) } onTextMessageReceived: { console.log(message); } onErrorStringChanged: { console.log(errorString) } } Button { text: "send" onClicked: { webScoket.sendTextMessage("From QtQuick") console.log("send") } }}
1 0
- Java 与 QtQuick 之 WebSocket
- Java Web 与 QtQuick
- QML 入门与 QtQuick 学习路线之前言
- qtquick 学习之二
- WebSocket与Java
- WebSocket与Java
- WebSocket与Java
- websocket 与java
- websocket与Java实例
- WebSocket 之 Java API
- 《java websocket》之 实现
- QtQuick 与 C++ 的结合
- QtQuick与QWidget嵌套使用
- qtquick 与c++交互总结
- QtQuick之Canvas图像圆角遮罩
- WebSocket Java学习与实现
- 《java websocket》之 描述篇
- QtQuick 中的 qml 与 Qt 的 C++
- I want to be a nice man
- cf667d 最短路建图 + 枚举 + 最优化剪枝
- Leetcode 100
- iOS中正则表达式的使用与了解
- gdb命令
- Java 与 QtQuick 之 WebSocket
- solr4.7.2时间字段的问题
- 山东省第一届ACM大学生程序设计竞赛 Greatest Number 二分查找
- ViewPager画廊效果
- 重装操作系统后,如何利用原有oracle表空间文件还原数据库
- Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)
- Mac 下的键盘流
- Leetcode 237
- ANDROID开发笔记(二)Vuforia研究1