Lightweight, Typesafe, Reliable, Guaranty delivery, Ordered, High performant java nio sockets build
on top of udp.
- Use jitpack as repository
- Add mocket to dependencies
As shown below:
- Maven
<project>
...
<repositories>
...
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
</project>
<dependencies>
...
<dependency>
<groupId>com.github.Nishant-Pathak</groupId>
<artifactId>mocket</artifactId>
<version>v1.0</version>
</dependency>
</dependencies>
- Gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
compile 'com.github.Nishant-Pathak:mocket:v1.0'
}
To build server:
ServerBuilder<byte []> serverBuilder = new ServerBuilder<byte []>()
.port(serverPort);
Server<byte[]> server = serverBuilder.build();
To read:
while (true) {
// blocking read
Pair<SocketAddress, byte[]> readBytes = server.read();
}
To write:
// write to server
server.write(read.getSecond(), read.getFirst());
Write signature:
/**
* writed data to the given address
* @param data to send to addredd
* @param address of the client connected
* @throws IOException if error occurs while writing to the socket
* @throws InterruptedException if write is interrupted
*/
void write(T data, SocketAddress address) throws IOException, InterruptedException;
To build client:
ClientBuilder<byte []> builder = new ClientBuilder<byte []>()
.host("127.0.0.1", 8080);
Client<byte []> client = builder.build();
To read:
// blocking read
byte[] data = client.read();
To write:
client.write(data);
Write signature:
/**
* write object of type T on the wire
* it used @{@link com.network.mocket.handler.MocketStreamHandler} to parse the object
* @param data object to send on wire to the server.
* @throws IOException if error occurs while writing to the socket
* @throws InterruptedException if write is interrupted
*/
void write(T data) throws IOException, InterruptedException;
Implement java interface and add it to the client and server builder as
builder.addHandler(new MyCustomHandler())
public interface MocketStreamHandler<P> {
/**
* Used to encode object to byte stream
* @param in inout object of tye {P}
* @return byte array representing object
* @throws ParseException throws if fails to encode or decode
*/
byte [] encode(P in) throws ParseException;
/**
* Used to decode bytestream to object
* @param out inout object of tye {P}
* @return byte array representing object
* @throws ParseException throws if fails to encode or decode
*/
P decode(byte [] out) throws ParseException;
}
Sample server client can be found here example.
- Service-Service communication inside data center.
- Use in android app for better performance in flaky networks.
- Use in senser based Android things device to push* periodic data to the server.
*Some gateways might block UDP traffic.
- Add ssl support.
- Have support for TCP.
- Multipart TCP support.
I am more than happy to accept external contributions to the project in the form of feedback, bug reports and even better - pull requests :)
If you would like to submit a pull request, please make an effort to follow the guide in CONTRIBUTING.md.
Copyright (C) 2016 - 2017 Nishant Pathak
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.