使用Scala模拟简单的RPC通信,Socket编程
来源:互联网 发布:收购博客玩家数据 编辑:程序博客网 时间:2024/06/12 22:52
初步尝试使用Scala编程,还有很多不熟悉的地方,其实Scala的socket编程也是调用的java的api,所以基本上和java的代码大同小异。
实现功能大体如下:客户端发送一个序列化参数,里面以空格分割几个参数,在服务端进行接收,并分割字符串,获取到一个字符串数组,然后对其进行模式匹配,返回不同的处理结果,写入到输出流中,客户端获取到返回的结果并打印。
代码如下:
客户端代码:
package com.rpc.clientimport 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.serverimport 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阶段,好多还没有掌握,可能代码写的并不是很理想,希望过段时间可以优化的更加实用一点。
希望大家不吝赐教,一起进步。
0 0
- 使用Scala模拟简单的RPC通信,Socket编程
- scala 实现简单的RPC通信流程
- 用Scala模拟RPC通信
- 使用scala实现Akka底层的rpc通信
- 简单的socket通信 socket编程
- 一次简单的接口编程,使用socket通信
- Socket编程实践模拟通信
- C#版 Socket编程(最简单的Socket通信功能
- RPC和Socket通信的区别
- 使用socket的阻塞简单通信聊天工具
- Android中socket通信的简单使用
- RPC 与 Socket 通信
- RPC&Socket通信
- RPC 与 Socket 通信
- 网络编程:使用Socket实现简单的服务器和客户端的通信
- 简单的SOCKET通信
- 简单的Socket通信
- 简单的Socket通信
- CCF NOI1064 计算斐波那契第n项
- 1016. 部分A+B (15)
- c# 设置禁止改变窗体大小
- C++抽象编程——接口(5)——随机数算法
- matplotlib的基本用法(一)——figure的使用
- 使用Scala模拟简单的RPC通信,Socket编程
- bzoj3697: 采药人的路径
- AngularJs组件
- codeforces 9C (DFS)之 Hexadecimal's Numbers
- 欢迎使用CSDN-markdown编辑器
- python-内置函数filter()
- 第七讲AngularJS 过滤器
- 记我在软件公司的一年
- Dogs' Candies