使用Scala模擬簡單的RPC通訊,Socket程式設計
初步嘗試使用Scala程式設計,還有很多不熟悉的地方,其實Scala的socket程式設計也是呼叫的java的api,所以基本上和java的程式碼大同小異。
實現功能大體如下:客戶端傳送一個序列化引數,裡面以空格分割幾個引數,在服務端進行接收,並分割字串,獲取到一個字串陣列,然後對其進行模式匹配,返回不同的處理結果,寫入到輸出流中,客戶端獲取到返回的結果並列印。
程式碼如下:
客戶端程式碼:
package com.rpc.client
import java.io.{DataInputStream, DataOutputStream, ObjectOutputStream}
import java.net.{InetAddress, Socket}
/**
* 模擬rpc通訊的客戶端
* Created by Administrator on 2017/4/27 0027.
*/
/*case class SubmitTask(id: String, name: String)
case class HeartBeat(time: Long)
case object CheckTimeOutTask*/
object RpcClient {
//val arr = Array(CheckTimeOutTask, new HeartBeat(123), HeartBeat(88888), new HeartBeat(666), SubmitTask("0001", "task-0001"))
def main(args: Array[String]): Unit = {
//建立socket通訊
val ia: InetAddress = InetAddress.getByName("localhost")
val socket: Socket = new Socket(ia,10001)
//建立輸入輸出流
val out: ObjectOutputStream = new ObjectOutputStream(new DataOutputStream(socket.getOutputStream))
val in: DataInputStream = new DataInputStream(socket.getInputStream)
//獲取一個陣列長度的一個隨機數,選擇一個隨機的測試資料
//val a = "HeartBeat" + " " + "123"
//val a = "SubmitTask" + " " + "0001" + " " + "task-0001"
val a = "CheckTimeOutTask"
println("本次獲取的是:"+ a)
//向服務端傳送獲取到的引數
//out.writeObject(a)
out.writeUTF(a)
//out.write(a)
out.flush()
//接受服務端的返回結果
val result: String = in.readUTF()
println("服務端返回結果:" + result)
in.close()
out.close()
socket.close()
}
}
服務端程式碼:package com.rpc.server
import java.io.{DataInputStream, DataOutputStream, ObjectInputStream}
import java.net.{ServerSocket, Socket}
/**
* 模擬rpc通訊的服務端程式
* Created by Administrator on 2017/4/27 0027.
*/
/*case class SubmitTask(id: String, name: String)
case class HeartBeat(time: Long)
case object CheckTimeOutTask*/
object RpcServer {
//val arr = Array(CheckTimeOutTask, new HeartBeat(123), HeartBeat(88888), new HeartBeat(666), SubmitTask("0001", "task-0001"))
def main(args: Array[String]): Unit = {
//建立服務端
val listener: ServerSocket = new ServerSocket(10001)
println("服務端正在服務中.......")
while (true) {
//建立socket通訊
val socket: Socket = listener.accept()
//建立輸入輸出流
val out = new DataOutputStream(socket.getOutputStream())
val in = new ObjectInputStream(new DataInputStream(socket.getInputStream()))
val read: String = in.readUTF()
println("客戶端傳送內容:" + read)
val ma: Array[String] = read.split(" ")
val result = ma match {
case Array("SubmitTask", id ,name) => {
s"$id, $name"
}
case Array("HeartBeat",time) => {
s"$time"
}
case Array("CheckTimeOutTask") => {
"check"
}
case _ => {
"error"
}
}
//將服務端的結果寫回客戶端
out.writeUTF(result.toString)
out.flush()
out.close()
in.close()
socket.close()
}
}
}
輸出結果:
服務端測試結果:
客戶端測試結果:
初步學習Scala階段,好多還沒有掌握,可能程式碼寫的並不是很理想,希望過段時間可以優化的更加實用一點。
希望大家不吝賜教,一起進步。
相關文章
- 簡單的Socket通訊
- socket 完成簡單的通訊
- 網路程式設計-Socket通訊程式設計
- Linux網路程式設計之socket簡單通訊--客戶端程式碼Linux程式設計客戶端
- Java的Socket通訊簡單例項Java單例
- Proteus實現簡單51程式的設計與模擬
- Linux網路程式設計之socket簡單通訊TCP--服務端程式碼Linux程式設計TCP服務端
- Golang併發程式設計程式通訊channel瞭解及簡單使用Golang程式設計
- Scala 簡介 [摘自 Scala程式設計 ]程式設計
- c#實現最簡單的socket通訊C#
- 基於Select模型的通訊模擬--win32程式設計程式碼模型Win32程式設計
- C#網路程式設計-簡單的通訊原始碼C#程式設計原始碼
- Windows Socket程式設計精華《TCP通訊伺服器》Windows程式設計TCP伺服器
- 程式間通訊(Socket)
- 簡單的RPC程式設計實踐——HelloWorld的實現RPCC程式程式設計
- C# 如何實現簡單的Socket通訊(附示例)C#
- 使用 Raku 編寫簡單的文字識別模擬程式
- Android 使用Socket完成程式間通訊Android
- 簡單設計並開發一個行動通訊程式
- linux網路程式設計之用socket實現簡單客戶端和服務端的通訊(基於TCP)Linux程式設計客戶端服務端TCP
- SearchView的簡單使用和模擬搜尋View
- 程式設計師修神之路--簡約而不簡單的分散式通訊基石程式設計師分散式
- C# 簡單的聊天大廳功能及原始碼(socket通訊)C#原始碼
- Socket最簡單的客戶端與服務端通訊-Java客戶端服務端Java
- Linux Socket 程式設計簡介Linux程式設計
- 通過socket實現DUP程式設計程式設計
- socket通訊
- 1.12-java socket程式設計 模擬2個機器人對話Java程式設計機器人
- PAT B1036 跟奧巴馬一起程式設計(簡單模擬)程式設計
- socket通訊的建立
- php的socket通訊PHP
- Socket 由淺入深系列--------- 簡單實現程式設計(三)程式設計
- 玩轉 PHP 網路程式設計全套之 unix 本地域 socket 通訊PHP程式設計
- 模擬簡單的動態代理
- Socket網路程式設計基礎與實踐:建立高效的網路通訊程式設計
- 一段最簡單的使用socket.io進行伺服器和客戶端通訊的例子程式碼伺服器客戶端
- 使用java模擬scala函數語言程式設計將函式作為引數傳入方法中Java函數程式設計函式
- 基於akka與scala實現一個簡單rpc框架RPC框架