hprose.server.HproseTcpServer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hprose-java Show documentation
Show all versions of hprose-java Show documentation
Hprose is a High Performance Remote Object Service Engine.
It is a modern, lightweight, cross-language, cross-platform, object-oriented, high performance, remote dynamic communication middleware. It is not only easy to use, but powerful. You just need a little time to learn, then you can use it to easily construct cross language cross platform distributed application system.
Hprose supports many programming languages, for example:
* AAuto Quicker
* ActionScript
* ASP
* C++
* Dart
* Delphi/Free Pascal
* dotNET(C#, Visual Basic...)
* Golang
* Java
* JavaScript
* Node.js
* Objective-C
* Perl
* PHP
* Python
* Ruby
* ...
Through Hprose, You can conveniently and efficiently intercommunicate between those programming languages.
This project is the implementation of Hprose for Java.
/**********************************************************\
| |
| hprose |
| |
| Official WebSite: http://www.hprose.com/ |
| http://www.hprose.org/ |
| |
\**********************************************************/
/**********************************************************\
* *
* HproseTcpServer.java *
* *
* hprose tcp server class for Java. *
* *
* LastModified: May 3, 2016 *
* Author: Ma Bingyao *
* *
\**********************************************************/
package hprose.server;
import hprose.common.HproseContext;
import hprose.common.HproseMethods;
import hprose.io.ByteBufferStream;
import hprose.net.Acceptor;
import hprose.net.Connection;
import hprose.net.ConnectionHandler;
import hprose.net.TimeoutType;
import hprose.util.concurrent.Action;
import hprose.util.concurrent.Promise;
import java.io.IOException;
import java.lang.reflect.Type;
import java.net.Socket;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionException;
public class HproseTcpServer extends HproseService {
private final static ThreadLocal currentContext = new ThreadLocal();
private volatile ExecutorService threadPool = null;
private volatile int readTimeout = 30000;
private volatile int writeTimeout = 30000;
private boolean enabledThreadPool = false;
private int reactorThreads = 2;
private Acceptor acceptor = null;
private String host = null;
private int port = 0;
private final class ServerHandler implements Runnable {
private final Connection conn;
private final ByteBuffer data;
private final Integer id;
public ServerHandler(Connection conn, ByteBuffer data, Integer id) {
this.conn = conn;
this.data = data;
this.id = id;
}
@SuppressWarnings("unchecked")
public final void run() {
TcpContext context = new TcpContext(HproseTcpServer.this, conn.socketChannel());
currentContext.set(context);
Object response;
try {
response = HproseTcpServer.this.handle(data, context);
}
catch (Throwable e) {
conn.close();
currentContext.remove();
return;
}
finally {
ByteBufferStream.free(data);
}
if (response instanceof Promise) {
((Promise)response).then(new Action() {
public void call(ByteBuffer value) throws Throwable {
conn.send(value, id);
}
}, new Action() {
public void call(Throwable e) throws Throwable {
conn.close();
}
}).complete(new Action
© 2015 - 2025 Weber Informatics LLC | Privacy Policy