1. 程式人生 > >基於TCP實現的最簡單RPC demo

基於TCP實現的最簡單RPC demo

package com.caicongyang.provider;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Method;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;

import com.caicongyang.server.SayHelloService;
import com.caicongyang.server.SayHelloServiceImpl;

/**
 * 
 * <p> 
 * Title: Provider.java 
 * Package com.caicongyang.provider 
 * </p>
 * <p>
 * Description: RPC服務提供者,供客戶端呼叫
 * <p>
 * @author Tom.Cai
 * @created 2016-2-23 下午10:31:40 
 * @version V1.0 
 *
 */
public class Provider {
	
	public static void main(String[] args) {
		ServerSocket server =  null;
		ObjectOutputStream out = null;
		try {
			server = new ServerSocket(8080);
			Socket socket =null;
			
			while(true){
				System.out.println("---開始監聽---");
				socket = server.accept();
				ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
				String interfaceName = input.readUTF(); //介面名稱
				String methodName = input.readUTF(); //方法名稱
				Class<?>[] parameterType = (Class<?>[]) input.readObject(); //方法型別
				Object[] arguments = (Object[]) input.readObject();    //引數列表
				System.out.println("接收到的引數:"+Arrays.toString(arguments));
				
				//根據介面名稱獲取class
				Class<?> serviceInterfaceClass = Class.forName(interfaceName);
				//根據方法名稱和引數型別反射得到方法
				Method method = serviceInterfaceClass.getMethod(methodName, parameterType);
				//服務例項化(這裡做簡單處理,正常應該根據得到的介面名稱serviceInterfaceClass獲取對應的service,但本demo只提供一個服務)
				SayHelloService service = new SayHelloServiceImpl();
				
				//反射執行這個方法
				Object result = method.invoke(service, arguments);
				
				//寫會處理結果
				out = new ObjectOutputStream(socket.getOutputStream());
				out.writeObject(result);
				
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				out.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			if(server!=null){
				try {
					server.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				server = null;
			}
		}
	}
}

客戶端呼叫類:Consumer.java

相關推薦

基於TCP實現簡單RPC demo

package com.caicongyang.provider; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflec

[機器學習]基於OpenCV實現簡單的數字識別

http://blog.csdn.net/jinzhuojun/article/details/8579416 本文將基於OpenCV實現簡單的數字識別。這裡以遊戲Angry Birds為例,通過以下幾個主要步驟對其中右上角的分數部分進行自動識別。 1. 學習分類器 根據

100行代碼實現簡單基於FFMPEG+SDL的視頻播放器(SDL1.x)【轉】

工程 全屏 升級版 gin avcodec ive 系列文章 相同 hello 轉自:http://blog.csdn.net/leixiaohua1020/article/details/8652605 版權聲明:本文為博主原創文章,未經博主允許不得轉載。

100行程式碼實現簡單基於FFMPEG+SDL的視訊播放器(SDL1.x)

                =====================================================最簡單的基於FFmpeg的視訊播放器系列文章列表:=====================================================簡介FFMPEG

Scala基於Akka的Remote Actor實現簡單RPC

spark 1.3中的通訊是基於Akka實現的,Actor之間的互動都是通過訊息,並且所有動作都是非同步的。 本文基於spark 1.3通訊核心原理實現一個簡單的基於akka的rpc框架。 服務端:Server //模式匹配 訊息型別 case cla

XCode版【100行程式碼實現簡單基於FFMPEG+SDL的視訊播放器】

【來自】 1.新建XCode工程後,發現即使安裝了SDL和FFMPEG也編譯不成功,需要修改各種環境。經過我的不懈努力加百穀啥的...貼個能編譯通過的過程出來。謹記! 2.首先需要編譯好ffmpeg原始碼,然後還需要安裝SDL(ffmpeg直接編譯,SDL我是通過brew安

用Python實現簡單的文字識別:基於百度雲文字識別API

Python版本:3.6.5 百度雲提供的文字識別技術,準確率還是非常高的,而且每天還有5w次免費的呼叫量,對於用來學習或者偶爾拿來用用,已經完全足夠了。文章提供一個模板,稍加修改就可以直接套用。註釋中提到必須輸入的地方,你都正確地輸入了的話,就可以完成一次簡單的文字識別了

純js實現簡單的文件上傳(後臺使用MultipartFile)

post post方式 cnblogs set ner progress round pre max <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <

JavaScript實現簡單的拖拽效果

stop 效果展示 title 另存為 -h 通過 沒有 軟件 .cn 一、一些無關痛癢的嘮叨 拖拽還是挺不錯的一個頁面效果,我個人認為,其生命力在於可以讓用戶自己做一些操作,所謂自定義。例如: ①瀏覽器標簽順序的拖拽切換 現在基本上所有的選項卡式的瀏覽器都有順序拖拽切換的

【原始碼剖析】threadpool —— 基於 pthread 實現簡單執行緒池

部落格新地址:https://github.com/AngryHacker/articles/issues/1#issue-369867252 執行緒池介紹 執行緒池可以說是專案中經常會用到的元件,在這裡假設讀者都有一定的多執行緒基礎,如果沒有的話不妨在這裡進行了解:POSIX

梯度下降法實現簡單線性迴歸問題python實現

梯度下降法是非常常見的優化方法,在神經網路的深度學習中更是必會方法,但是直接從深度學習去實現,會比較複雜。本文試圖使用梯度下降來優化最簡單的LSR線性迴歸問題,作為進一步學習的基礎。 import numpy as np import pandas as pd from numpy import *

Python實現簡單的三層神經網路

import numpy as np def sigmoid( x, deriv=False): #求導:derivation if (deriv == True): return x*(1-x) return 1/(1+np.exp(-x)) x=np

nginx實現簡單的直播

系統環境 [[email protected] live]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [[email protected]-test live]# getenforce Disa

基於C#實現簡單的隨機抽號器

由於老師需要,讓我寫一個隨機抽號器,,就很簡單的寫一個,用C#寫的。主要依靠random來實現一個隨機數以及list可變長陣列實現的。 由於專案難度不大,我就直接放程式碼了。 using System; using System.Collections.Generic; using

[文件和原始碼分享] 基於MFC實現簡單FTP客戶端

在WINDOWS環境下,使用VC++開發工具實現一個FTP客戶端軟體。在本次FTP的設計中主要使用WinInet API程式設計,無需考慮基本的通訊協議和底層的資料傳輸工作,MFC提供的WinInet類是對WinInet API函式封裝而來的,它為使用者提供了更加方便的程式設計介面。而在該設計中,使用的類包括

一個gtk3的css使用的簡單demo

  首先裝好gtk3的依賴,不管是fedora還是ubuntu裝好之後執行: pkg-config --cflags --libs "gtk+-3.0"  能正常顯示gtk3的依賴情況說明gtk3已經裝好,之後編譯: gcc css-demo.c `pkg-c

redis list型別實現簡單的佇列

訊息佇列的好處 提高響應速度、解耦、穩定性(故障處理)、可擴充套件性、有序性、非同步性。 redis實現訊息佇列方法1 redis有個list型別,可以用來實現一定程度上的訊息佇列。 如果我們要開發一個電商網站,其中一個很重要的模組就是訂單模組(包括訂單資料入庫、商品庫存減少

基於C#實現串列埠通訊Demo

https://www.cnblogs.com/Zed-H/p/8651882.html 1.基本概念   2.前端winForm佈局如下(僅僅為了實現功能,佈局略醜)   3.程式碼實現如下 1 nam

C語言實現簡單的2048小遊戲

網上解釋很多了,直接上程式碼吧,這個功能很簡單,易於學習,後期有時間會完善功能 #include<stdio.h> #include<stdlib.h> #include<string.h> #define Key_Up 0x4800

Tensorflow實現簡單的神經網路

程式程式碼: #匯入相應模組 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #讀入資料 mnist = input_data.read_data_sets('MNI