直接远程到服务器上写代码有什么好处

直接远程到服务器上写代码有什么好处,第1张

本系列教程将和您一起探讨如何利用Java语言一步一步实现自己的web服务器。

1需求描述

第1讲我们要实现的效果是:当我们在浏览器的地址栏输入localhost:8080的时候,我们会看到"hello,this is my web server!"。如下:

2实现

做任何事情都不能太急,对于编程来说也不例外。以上的案例虽然简单,但却是我们编写web服务器的非常关键的一步,麻雀虽小,五脏俱全。

2.1基础知识

首先我们来分析一下,为了实现上面的功能,我们需要具备哪些基础知识。

1)CS架构介绍

CS架构是一种非常常见的软件架构,主要由两部分组成:客户端和服务器端即C端和S端。

图2-1 CS架构

其一般的交互流程为:客户端发送一条请求给服务器,服务器在收到请求后,解析处理该请求,并将结果以响应的方式返回给客户端。

那么在我们要要实现的需求中,客户端特定为浏览器,请求特指http请求,响应特指http响应。

一般情况CS架构的软件,我们需要分别开发C端和S端的程序,但是由于本题客户端就是我们日常使用的浏览器,所以我们不需要开发C端程序,所以仅需要开发服务器端程序。

这是我们实现需求需要了解的第一个基础知识。

2)http请求和响应

有了上面的基础知识后,接下来我们需要具体的了解,这个http请求长什么样,http响应长什么样?

下面我们来看一个具体的请求和响应报文的格式:

http请求报文:

GET / HTTP/1.1Host: www.baidu.com.cnConnection: keep-alivePragma: no-cacheCache-Control: no-cacheUpgrade-Insecure-Requests:1User-Agent: Mozilla/5.0(MacintoshIntel Mac OS X 10_12_3) AppleWebKit/537.36(KHTML, like Gecko)Chrome/56.0.2924.87 Safari/537.36Accept:text/html,application/xhtml+xml,application/xmlq=0.9,image/webp,*/*q=0.8Accept-Encoding: gzip, deflate,sdchAccept-Language:zh-CN,zhq=0.8,enq=0.6,zh-TWq=0.4,jaq=0.2

http响应报文:

HTTP/1.1200 OKCache-Control: privateContent-Length:21005Content-Type: text/htmlServer: Microsoft-IIS/7.0X-Powered-By: ASP.NETDate: Tue,07 Mar 201701:59:58GMT

如想了解更多,算法与编程之美公众号的《BS架构基础-http报文》有简单易懂的介绍。

3)Socket编程

有了以上的基础知识之后,我们还需要了解Java在实现CS架构时使用的具体技术,那就是socket编程。socket编程的入门其实并不难,下面为大家做简要介绍:

- socket编程可以分为两部分,一部分为服务器端的编程,另外一部分为客户端。对于服务器端我们使用ServerSocket类,客户端使用Socket类。

-一旦建立连接后,获取了客户端的socket对象,接下来就可以通过socket对象的InputStream来读取请求,而OutputStream来写响应。

只需要了解上面的两点即可,如想了解更多,算法与编程之美公众号的《Socket编程基础》有简单易懂的介绍。

2.2实现

有了上面的3个基础知识点后,接下来我们可以开始编程实现了。

主要的业务流程为:

1.服务器端利用ServerSocket开启8080端口开始监听;

2.当有客户端发起的http请求时,接受该客户端读取http请求,进行相关处理;

3.返回http响应。

具体的代码实现如下:

public class WebServer {private ServerSocket serverSocketpublic WebServer(){ try {//开启8080端口监听 serverSocket = newServerSocket(8080)} catch (IOException e){ e.printStackTrace()}}public void run(){ try { Socket socket =serverSocket.accept()//读取http请求 BufferedReader reader = newBufferedReader(new InputStreamReader(socket.getInputStream()))String line = nullwhile (!(line =reader.readLine()).equals("")){ System.out.println(line)} //返回http响应 PrintWriter writer = newPrintWriter(socket.getOutputStream())writer.print("HTTP/1.1200OK\\r\\n")writer.print("\\r\\n")writer.print("hello, thisis my web server!")writer.flush()socket.close()} catch (IOException e){ e.printStackTrace()} }public static void main(String[] args){ new WebServer().run()}}

3总结

我们已经按照需求实现了相关功能,但是细心的你可能会发现以下的问题:

1)浏览器刷新一次,服务器端程序就终止了;

2)这个服务器能不能作为静态网页html服务器呢?

3)。。。

如想了解更多,欢迎关注“算法与编程之美”公众号将持续为您带来更多精彩内容。

注意:安装的前提条件是配置好Git的相关环境或者安装好git.exe,此处不再重点提及

上传的步骤:(本文采用git 命令界面进行操作)

( git config --global user.email "you@example.com"

git config --global user.name "Your Name")实现登陆

1.进入本地的项目目录,右键“Git Bash here”,调出git命令行界面,然后输入

[plain] view plain copy 在CODE上查看代码片派生到我的代码片

git init

2.就是将目录下的所有文件上传,也可以将“.”换成具体的文件名

[plain] view plain copy 在CODE上查看代码片派生到我的代码片

git add .

3.将项目提交到gitHub

[html] view plain copy 在CODE上查看代码片派生到我的代码片

git commit -m "注释语句"

4.在github上创建新的repository

5.点击 “Create repository”跳转到一个连接,如下红色圈获取到本项目的github地址

6.将本地的代码关联到github上

[html] view plain copy 在CODE上查看代码片派生到我的代码片

git remote add origin 项目的github地址

7.上传代码到github之前需要先pull

[plain] view plain copy 在CODE上查看代码片派生到我的代码片

git pull origin master

8.上传代码到远程仓库

[plain] view plain copy 在CODE上查看代码片派生到我的代码片

git push -u origin master

之后输入账号,密码,上传到github

从图上可以看到,PHP实现了一个典型的动态语言执行过程:拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令 (opcodes),然后ZEND虚拟机顺次执行这些指令完成操作。PHP本身是用C实现的,因此最终调用的也都是C的函数,实际上,我们可以把PHP看 做是一个C开发的软件。

PHP的执行的核心是翻译出来的一条一条指令,也即opcode。

Opcode是PHP程序执行的最基本单位。一个opcode由两个参数(op1,op2)、返回值和处理函数组成。PHP程序最终被翻译为一组opcode处理函数的顺序执行。

常见的几个处理函数:

1    ZEND_ASSIGN_SPEC_CV_CV_HANDLER : 变量分配 ($a=$b)  

2    ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER:函数调用  

3    ZEND_CONCAT_SPEC_CV_CV_HANDLER:字符串拼接 $a.$b  

4    ZEND_ADD_SPEC_CV_CONST_HANDLER: 加法运算 $a+2  

5    ZEND_IS_EQUAL_SPEC_CV_CONST:判断相等 $a==1  

6    ZEND_IS_IDENTICAL_SPEC_CV_CONST:判断相等 $a===1  


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/549197.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-28
下一篇2023-06-28

发表评论

登录后才能评论

评论列表(0条)

    保存