`
laziest
  • 浏览: 9555 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

第二个程序,进阶版

    博客分类:
  • Ruby
阅读更多
require 'socket'
rules = Hash.new(0)
File.open("rules.txt") do |rule_file|
  rule_file.each do |line|
    area,prefix = line.chomp.split(/\s*\,\s*/)
    rules[prefix] = area;
  end
end
puts "bind on localhost 2001"
server = TCPServer.new(2001)

while(session = server.accept)
  Thread.new(session) do |session|
    filewriters = Hash.new(0)
    #readline
    prefix = Time.now.to_i
    session.each do |line|
      begin
        code_seg = line[0,7];
        if rules.has_key?(code_seg)
          area = rules[code_seg];
          if !filewriters.has_key?(area)
            filewriters[area] = File.open(prefix.to_s+"_"+area+".txt","w+")
          end
          filewriters[area] << line
        else
          if !filewriters.has_key?("000")
            filewriters["000"] = File.open(prefix.to_s+"_"+"000.txt","w+")
          end
          filewriters["000"] << line
        end
      rescue
        session.puts $!
      end
    end
    #write back and delete files
    begin
      filewriters.each do |area,rfile|
        rfile.seek(0)
        session.puts("area:" + area)
        rfile.each do |line|
          session.puts line
        end
        rfile.close
        File.delete(prefix.to_s+"_"+area+".txt")
      end
    rescue
      session.puts $!
    end
    #close session
    session.close
  end
end

进阶版将我的第一个程序改写成了SOCKET服务。他监听2001端口并开启新线程处理每一个请求,然后将处理结果写回了socket.

这一个程序测试了ruby的file socket等基本IO操作,同时测试了线程的功能,但是听网友说ruby的多线程不是实质上的多线程(或者说是不是像操作系统上的多线程),这一点目前还不了解,以后再深入研究吧。


忽然发现只增加了20行代码就支持了SOCKET+多线程模型,虽然没有细化一些功能,但是也够了。
分享到:
评论

相关推荐

    JAVA编程语言和数据结构第十一版 进阶版 编程答案

    在深入探讨Java编程语言与数据结构的第十一版(进阶版)的编程答案之前,首先需要理解这两个核心概念:Java编程语言和数据结构。Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems(现已被Oracle收购)在...

    《Java语言程序设计(进阶篇)》 课后习题第21章代码chapter21.rar

    《Java语言程序设计(进阶篇)》是深入学习Java编程的一本重要教材,其中第21章的课后习题代码集包含了丰富的Java高级特性应用实例,旨在帮助读者巩固和提升在面向对象编程、异常处理、多线程、网络编程、IO流等方面...

    《Java语言程序设计(进阶篇)》 课后习题第25章代码chapter25.rar

    在本压缩包“chapter25.rar”中,包含的是《Java语言程序设计(进阶篇)》一书的第25章课后习题的源代码。这是一份宝贵的资源,对于正在学习Java编程,尤其是深入阶段的学生来说,是提高编程技能和理解Java高级特性...

    应用程序开发进阶 应用程序开发进阶

    ### 应用程序开发进阶:深入探讨Windows CE.NET应用程序中的序列通讯 #### 知识点一:序列通讯(Serial I/O)基础 序列通讯,作为Windows CE.NET应用程序开发中的重要组成部分,允许设备通过串行通信接口(Serial ...

    Java语言程序设计.进阶篇(原书第8版).pdf

    进阶篇(原书第8版).pdf”,我们可以推测这本书主要聚焦于Java编程语言的高级应用和技术深化。Java作为一种广泛应用的编程语言,在软件开发、Web应用、移动应用(尤其是Android应用)等领域占据着重要地位。下面将...

    4VC6.0第二个简单程序共5页.pdf.zip

    【标签】"4VC6.0第二个简单程序共5页" 是对内容的简要概括,强调了这个教程是关于Visual C++ 6.0版本的,并且是学习序列中的第二个程序,通常意味着它是建立在第一个简单程序基础上的进阶内容。 【压缩包子文件的...

    Java语言程序设计第10版(基础篇+进阶篇) 答案

    Java语言程序设计是编程学习的重要教材,由Y. Daniel Liang和梁勇共同撰写,分为基础篇...这些知识点贯穿于《Java语言程序设计》的基础篇和进阶篇,通过解答书中复习题和课后题,读者可以深入理解并熟练运用Java编程。

    第二期:进阶操作VBA.rar

    在“第二期:进阶操作VBA”这个教程中,我们将深入探讨VBA的一些高级技巧和概念,帮助你从初学者向熟练开发者迈进。以下是本教程可能涵盖的一些关键知识点: 1. **模块和过程**:在VBA中,代码组织在模块内,而模块...

    C程序设计快速进阶大学教程:第15章 数组进阶.ppt

    - **蛇模型**:用数组存储蛇的坐标,数组的每一列代表一个节点,第一行存储横坐标,第二行存储纵坐标。蛇头用“#”表示,蛇身用“*”表示。 游戏的运行基于这样一个流程: - 获取玩家输入或超时信息。 - 根据...

    C 语言程序实现ASCII艺术-绘制心形图案及其进阶版本

    随后,第二个程序引入了更多元素,允许用户指定图形的尺寸与填充字符。最终,第三个程序不仅加入了边界字符的支持,还增加了对更大尺寸图形生成的适应性和更好的异常输入处理。 适合人群:适合于有一定编程基础但...

    C语言程序设计第9章指针进阶.ppt

    数组`s`的每一行都可以视为一个独立的一维数组,因此可以获取行地址,如`s[0]`表示第一行的地址,而`s[0]+1`则是第二元素的地址。对于列地址,可以使用指针加法来访问,例如`s[0]+2`表示第三列的第一个元素。 9.2.2...

    学堂在线郑莉《c++程序设计语言》(基础和进阶)的编程作业题

    《C++程序设计语言》是C++编程领域的一本经典教材,由郑莉教授在学堂在线平台上开设的课程中作为主要参考书籍。本压缩包文件包含的编程作业题旨在帮助学习者深入理解和掌握C++的基础知识以及进阶技巧。通过实践这些...

    38课 React第二天-进阶(2018.9.27).rar

    在本课程"38课 React第二天-进阶(2018.9.27)"中,我们将会深入探讨React.js的高级概念和技术,这是一个非常流行的JavaScript库,用于构建用户界面,尤其适用于单页应用程序(SPA)。React以其组件化开发、虚拟DOM...

    《Java语言程序设计(进阶篇)》 课后习题第24章代码chapter24.rar

    《Java语言程序设计(进阶篇)》是深入学习Java编程的一本教材,其第24章的课后习题代码包含了许多关于Java高级特性的实践应用。在这一章中,我们很可能会接触到诸如多线程、网络编程、IO流、集合框架、异常处理、...

    易语言第二个例子

    "第二个例子"通常意味着这个代码是继第一个基础示例之后的进阶教学,旨在进一步解释易语言的语法特性、函数调用或者流程控制等概念。 易语言的核心特点包括直观的可视化编程界面、丰富的内置函数库以及支持多种程序...

    Rust 程序设计语言(第二版) 简体中文版

    在本书《Rust 程序设计语言》第二版简体中文版中,作者们致力于帮助读者理解 Rust 这一现代系统级编程语言的基础与进阶特性。此书涵盖了从安装到实际应用的一系列知识点,以下将对提供的章节内容进行详细的解析。 #...

    JAVA语言程序设计第六版(基础篇和进阶篇)答案。

    《JAVA语言程序设计第六版(基础篇和进阶篇)答案》是一份涵盖全面的JAVA学习资源,旨在帮助读者深入理解和实践JAVA编程。这个压缩包包含的答案覆盖了基础到高级的JAVA编程概念,可能包括变量声明、数据类型、流程...

    Scratch编程入门与算法进阶.pptx

    第二部分是算法进阶,详细介绍了几个经典的算法问题及其对应的Scratch实现。这些问题包括约瑟夫环问题、最长回文子串、0/1背包问题、拓扑排序等。通过这些实例,读者可以深入理解算法的本质和实现方法,提高解决问题...

    ProE野火版TOOLK IT二次开发入门与进阶

    - DLL(Dynamic Link Library)是动态链接库的简称,可以在多个程序间共享代码。 - 建立团队公用DLL函数库可以提高代码复用率。 2. **建立元件库** - 元件库是存储常用元件的地方,方便快速调用。 3. **螺丝系统*...

    Python程序设计(第二版)

    《Python程序设计(第二版)》是一本专为初学者设计的Python编程教材,它旨在帮助没有编程背景的读者快速掌握Python语言的核心概念和技能。本书涵盖了Python的基础知识,通过结合基础视频讲解、实例演示以及PPT教程...

Global site tag (gtag.js) - Google Analytics