WebSocket Java Programming入門-2(Programmatic)
阿新 • • 發佈:2018-12-25
為了完整期間,我還是將所有用到的配置以及程式碼都貼出來,讀者不要認為我很繁瑣即可
1、Maven POM
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <parent> <artifactId>websocket</artifactId> <groupId>websocket</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>websocket-programmatic</artifactId> <packaging>war</packaging> <name>websocket-programmatic Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>websocket-programmatic</finalName> </build> </project>
其實最主要是想用websocket api的包用於參與編碼,在執行期間,web容器早已自帶這個包了。
2、服務端程式碼
服務端的ServerEndpoint不僅要繼承Endpoint介面還要編寫一個ServerApplicationConfig,同樣web容器會自動探測到相關的ServerEndpoint
2.1、ProgrammaticHelloWorldServer類
package com.wangwenjun.websocket.programmatic; import javax.websocket.Endpoint; import javax.websocket.EndpointConfig; import javax.websocket.MessageHandler; import javax.websocket.Session; import java.io.IOException; public class ProgrammaticHelloWorldServer extends Endpoint{ @Override public void onOpen(Session session, EndpointConfig endpointConfig) { final Session mySession = session; mySession.addMessageHandler(new MessageHandler.Whole<String>(){ @Override public void onMessage(String s) { try { mySession.getBasicRemote().sendText("I got this ("+s+") from you,so i am sending it back!"); } catch (IOException e) { e.printStackTrace(); } } }); } }
好的,這樣我們就實現了一個程式設計式ServerEndpoint類,但是此時支援Websocket的web容器還是不知道該如何去尋找我們的ServerEndpoint,需要我們配置進ServerApplicationConfig才可以
2.2、ServerApplicationConfig的配置
package com.wangwenjun.websocket.programmatic; import javax.websocket.Endpoint; import javax.websocket.server.ServerApplicationConfig; import javax.websocket.server.ServerEndpointConfig; import java.util.HashSet; import java.util.Set; public class ProgrammaticConfig implements ServerApplicationConfig { @Override public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> classes) { Set<ServerEndpointConfig> sets = new HashSet<ServerEndpointConfig>(); ServerEndpointConfig config = ServerEndpointConfig.Builder.create(ProgrammaticHelloWorldServer.class, "/hello").build(); sets.add(config); return sets; } @Override public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scanner) { return scanner; } }
3、釋出執行
同樣我們需要執行mvn clean package將web專案打成一個war包,並且拷貝到tomcat中的webapps下,然後啟動tomcat,你會看到釋出成功,然後訪問地址http://localhost:8080/websocket-programmatic/ 這樣就可以和伺服器進行互動了。
4、《JAVA WEBSOCKET PROGRAMMING》中的一個問題
其實參照這麼書很多東西都是沒問題的,但是在程式設計式方式中,本書中描述的是實現ServerApplicationConfiguration介面,但是該介面在websocket API中不存在,可能是我引入的版本比較老,或者是作者使用的版本比較老,總之這一部分是有問題的,我在程式碼中作了修改,只要照著我的程式碼肯定沒有任何問題的。5、後續文章
好了,關於WebSocket的基本應用我們基本上了解的差不多了,雖然暫時只是一個比較淺層次的理解,但是不要過於擔心,在接下來我們會繼續深入的學習,並且經過一些很有代表性的例子來去學習Websocket,比如會包括如下的內容:- websocket的生命週期
- websocket的message詳細介紹
- websocket的Session以及config
- websocket的高階Message
- websocket的path mapping
- websocket的加密通訊
- websocket在其他J2EE容器下的使用
- websocket的例子,聊天室,線上檢視後臺服務的日誌等
- 介紹基於websocket的網頁版本的WebSSH(python和websocket的建立的一個非常牛鼻的SSH工具)