Cettia 1.0.0-Beta1 released
flowersinthesand wrote this on
Finally, all functionalities of Cettia 1.0 are implemented. Accordingly, Cetita Protocol 1.0.0-Beta1, Cettia JavaScript Client 1.0.0-Beta1 and Cettia Java Server 1.0.0-Beta1 have been released. This release focuses on binary event which allows to exchange binary data without using binary-to-text encoding and is one of features that many users have requested.
So far, you have had to serialize binary to text and send that text data to send binary, and receive text data and deserialize that text to binary to read binary, using an binary-to-text encoding scheme like Base64. It has inevitably brought about performance degradation as well as payload size increase. Moreover, you have had to figure out which events handle binary in advance and do serialization and deserialization manually.
Thanks to MessagePack which is a schemaless binary interchange format, now it is possible to deal with binary as a first-class citizen. If a given data or its one of properties is evaluated as binary, it will be internally serialized and deserialized according to MessagePack instead of JSON. Besides, it’s designed to work with any binary interchange format so you can let client determine an interchange format it will use e.g. BSON for Rust client and MessagePack for Go client per connection. Just let us know your needs. Anyway, here the most important thing is you don’t need to know about this at all.
Let’s take a look at the new feature. In the following example, both client-side and server-side sockets send text, binary and composite event to their counterpart on open event.
JavaScript Client
// In Node.js, replace 'cettia' with 'require("cettia-client")'
var socket = cettia.open(uri);
socket.on("open", function() {
// String object is text
socket.send("discard", "test");
// According to W3C Encoding standard https://encoding.spec.whatwg.org/
// encoder.encode takes text and returns binary in the form of ArrayBuffer
var encoder = new TextEncoder();
// In Node.js, replace 'encoder.encode("test")' with 'new Buffer("test")'
socket.send("discard", encoder.encode("test"));
// Even composite data including both text and binary can be exchanged
socket.send("discard", {text: "test", binary: encoder.encode("test")});
});
// Prints all received data
socket.on("discard", function(data) {
console.log(data);
});
Java Server
Server server = new DefaultServer();
server.onsocket((ServerSocket socket) -> {
socket.onopen((Void v) -> {
// String instance is text
socket.send("discard", "test");
// Byte array is binary
socket.send("discard", "test".getBytes());
// ByteBuffer is regarded as binary as well
socket.send("discard", ByteBuffer.wrap("test".getBytes());
// Even POJO as well as plain map including both text and binary can be exchanged
socket.send("discard", new LinkedHashMap<String, Object>() {{
put("text", "test");
put("binary", "test".getBytes());
}});
});
// Prints all received data
socket.on("discard", (Object data) -> System.out.println(data));
});
Also, cettia.js’s size is notably reduced from 5.18KB to 4.6KB minified and gzipped by dropping support for Internet Explorer 6-8 and now works pretty well in Node 4/5.
Here’s the full changelog:
- Binary event. cettia-protocol#9, cettia-javascript-client#9, cettia-java-server#6
- Node 4/5 support. cettia-protocol#8, cettia-javascript-client#7
- Accept typed arrays in send method. cettia-protocol#10
- Java 8 support. cettia-java-server#5
- Drop support for Internet Explorer 6-8. cettia-javascript-client#10
- JS Bin example doesn’t work with WebSocket in Internet Explorer 11 and Microsoft Edge. cettia-javascript-client#8
- Add README.md. cettia-protocol#11, cettia-javascript-client#11, cettia-java-server#7
As always, please let us know if you have any question or feedback.
All posts
- Asity 3.0.0 released on
- Asity 3.0.0-Beta1 released on
- Cettia JavaScript Client 1.1.0 released on
- Cettia JavaScript Client 1.0.2 released on
- New Cettia Starter Kit on
- Cettia Java Server 1.2.0 released on
- Cettia Java Server 1.2.0-Beta2 released on
- Cettia Java Server 1.1.0 released on
- Cettia Java Server 1.1.0-Beta1 released on
- Asity 2.0.0 released on
- Asity 2.0.0-RC1 released on
- Asity 2.0.0-Alpha2 released on
- Asity 2.0.0-Alpha1 released on
- Cettia JavaScript Client 1.0.1 released on
- Cettia 1.0.0 released on
- Cettia 1.0.0-RC1 released on
- Cettia JavaScript Client 1.0.0-Beta2 released on
- Cettia 1.0.0-Beta1 released on
- Cettia Java Platform is now Asity on
- Cettia 1.0.0-Alpha2 released on
- Cettia 1.0.0-Alpha1 released on