https://github.com/abhirockzz/websocket-chat
Sample code for the 'Java WebSocket API Handbook'
https://github.com/abhirockzz/websocket-chat
jsr356 tyrus websocket
Last synced: about 1 year ago
JSON representation
Sample code for the 'Java WebSocket API Handbook'
- Host: GitHub
- URL: https://github.com/abhirockzz/websocket-chat
- Owner: abhirockzz
- License: mit
- Created: 2017-03-01T04:10:07.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-03-01T04:15:00.000Z (over 9 years ago)
- Last Synced: 2025-03-24T00:24:47.003Z (about 1 year ago)
- Topics: jsr356, tyrus, websocket
- Language: Java
- Homepage: https://www.gitbook.com/book/abhirockzz/java-api-for-websocket-handbook/details
- Size: 16.6 KB
- Stars: 9
- Watchers: 2
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
The is a chat application (a canonical use case for WebSocket) built using the [Java WebSocket API (JSR 356)](jcp.org/en/jsr/detail?id=356). This is meant to help understand the API usage and try it hands on (this is not a full-blown chat service)
## Components
- Uses the [Tyrus](https://tyrus.java.net) implementation for the core logic
- Leverages the [Grizzly](https://grizzly.java.net/) container support available in Tyrus
- Packaged as a standalone JAR
## Build & run
The application is a Maven project
- To build, just execute `mvn clean install` which will produce an independent (fat/uber) JAR
- Run it using `java -jar target/websocket-chat.jar`
## Features
Here is what you can do with the chat application
- Join the chat room
- Send public messages
- Send private messages
- Get notified about new users joining
- Leave the chat room
- Get notified another user leaves the chat room
## Code
Before you explore the source code yourself, here is quick overview
|Class(es)|Category|Description|
|---------|--------|-----------|
|`ChatServer`|Core|It contains the core business logic of the application|
|`WebSocketServerManager`|Bootstrap|Manages bootstrap and shutdown process of the WebSocket container|
|`ChatMessage`,
`DuplicateUserNotification`,
`LogOutNotification`,
`NewJoineeNotification`,
`Reply`,
`WelcomeMessage`|Domain objects|Simple POJOs to model the application level entities|
|`ChatMessageDecoder`|Decoder|Converts chats sent by users into Java (domain) object which can be used within the application|
|`DuplicateUserMessageEncoder`
,`LogOutMessageEncoder`,
`NewJoineeMessageEncoder`,
`ReplyEncoder`,
`WelcomeMessageEncoder`|Encoder(s)|Converts Java (domain) objects into native (text) payloads which can be sent over the wire using the WebSocket protocol|
> **Unit tests**: The unit tests use the Java client API implementation in Tyrus
## Try it out
You would need a WebSocket client for this example - try the [Simple WebSocket Client](https://chrome.google.com/webstore/detail/simple-websocket-client/pfdhoblngboilpfeibdedpjgfnlcodoo?hl=en) which is a Chrome browser plugin. Here is a transcript
- Users **foo** and **bar** join the chatroom. To do so, you need to connect to the WebSocket endpoint URL e.g. `ws://localhost:8080/chat/foo/` (do the same for user **bar**). **foo** gets notified about **bar**
- User **john** joins (`ws://localhost:8080/chat/john/`). **foo** and **bar** are notified
- **foo** sends a message to everyone (public). Both **bar** and **john** get the message
- **bar** sends a private message to **foo**. Only **foo** gets it
- In the meanwhile, **john** gets bored and decides to leave the chat room. Both **foo** and **bar** get notified