GVKun编程网logo

Red Hat公司将从客户端-服务器模式转型至云计算(red hat enterprise)

4

想了解RedHat公司将从客户端-服务器模式转型至云计算的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于redhatenterprise的相关问题,此外,我们还将为您介绍关于delphi–I

想了解Red Hat公司将从客户端-服务器模式转型至云计算的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于red hat enterprise的相关问题,此外,我们还将为您介绍关于delphi – Indy TCP客户端/服务器与客户端充当服务器、html5 – 如何读取服务器上从客户端发送的HttpRequest数据、I / O通信从客户端到服务器程序进行读写、linux 客户端服务器模型的新知识。

本文目录一览:

Red Hat公司将从客户端-服务器模式转型至云计算(red hat enterprise)

Red Hat公司将从客户端-服务器模式转型至云计算(red hat enterprise)

红帽(Red Hat)正处于从世界顶级Linux企业向云计算服务提供商转型的过程中。2011年的时候,红帽CEO Jim Whitehurst曾在采访中表示,“平台即服务”(Platform-as-a-Service,简称PaaS)将成为该公司的未来。而在今天的博客文章中,Whitehurst用“从Linux迁移至OpenStack”这一举动进行了强调。

Red Hat公司将从客户端-服务器模式转型至云计算

Whitehurst说到:

“历史每隔20年就会迎来一次大变样,而我们正处于从客户端-服务器(cs)模式向云端和移动端(cloud-mobile)迁移的重大转型中。

越早布局,就约有可能成为新纪元的标准制定者——就像Wintel联盟在client-server时代所做的那样。我们正盯着成为企业云服务领导者的巨大的机会,正如我们在企业开源领域的领导地位一样。

竞争是激烈的,但企业不得不在多个云需求之间作出选择。若将开源打造成下一个时代的默认选择,红帽就必须成为云基础设施提供商的首选。”


对于Red Hat的这一决定,同为Linux领域翘楚的Cononical和Ubuntu创始人Mark Shuttleworth也表示赞同。

此外,除了微软的Azure,大多数其它云服务平台均给予Linux和开源软件——比如亚马逊的云平台就是给予Red Hat Enterprise Linux打造的。

Whitehurst指出:Red Hat Enterprise Linux已经拥有全球财务500强中90%以上的客户。

delphi – Indy TCP客户端/服务器与客户端充当服务器

delphi – Indy TCP客户端/服务器与客户端充当服务器

在以下情况下,如何使用Indy的TIdTCPClient和TIdTcpserver?
Client  ---------- initate connection -----------> Server
...
Client  <---------------command------------------- Server
Client  ----------------response-----------------> Server
...
Client  <---------------command------------------- Server
Client  ----------------response-----------------> Server

客户端启动连接,但作为“服务器”(等待命令并执行它们)。

在这种情况下,TIdTcpserver的OnExecute方法不能正常工作(至少我没有得到很好的效果)。我该怎么做?

我希望这个问题足够清楚。

解决方法

没有什么可以阻止你这样做与Indy的TIdTcpserver组件。

TIdTcpserver仅设置连接。你需要实现其余的。所以实际发送和接收的顺序可以是任何你想要的。

将此代码放在TIdTcpserver组件的OnExecute事件中:

var
  sName: String;
begin
  // Send command to client immediately after connection
  AContext.Connection.socket.WriteLn('What is your name?');
  // Receive response from client
  sName := AContext.Connection.socket.ReadLn;
  // Send a response to the client
  AContext.Connection.socket.WriteLn('Hello,' + sName + '.');
  AContext.Connection.socket.WriteLn('Would you like to play a game?');
  // We're done with our session
  AContext.Connection.disconnect;
end;

以下是您可以简单地设置TIdTcpserver的方法:

IdTcpserver1.Bindings.Clear;
IdTcpserver1.Bindings.Add.SetBinding('127.0.0.1',8080);
IdTcpserver1.Active := True;

这告诉服务器仅在端口8080上监听环回地址。这样可以防止计算机外的任何人连接到它。

然后,要连接您的客户端,您可以转到Windows命令提示符并键入以下内容:

telnet 127.0.0.1 8080

以下是输出:

What is your name?

marcus

Hello,marcus.

Would you like to play a game?

Connection to host lost.

没有telnet?以下是install telnet client on Vista and 7。

或者使用TIdTCP客户端,您可以执行以下操作:

var
  sPrompt: String;
  sResponse: String;
begin
  // Set port to connect to
  IdTCPClient1.Port := 8080;
  // Set host to connect to
  IdTCPClient1.Host := '127.0.0.1';
  // Now actually connect
  IdTCPClient1.Connect;
  // Read the prompt text from the server
  sPrompt := IdTCPClient1.socket.ReadLn;
  // Show it to the user and ask the user to respond
  sResponse := InputBox('Prompt',sPrompt,'');
  // Send user's response back to server
  IdTCPClient1.socket.WriteLn(sResponse);
  // Show the user the server's final message
  ShowMessage(IdTCPClient1.socket.AllData);
end;

这里要注意的一个重要事情是ReadLn语句等到有数据。这就是这一切的魔力。

html5 – 如何读取服务器上从客户端发送的HttpRequest数据

html5 – 如何读取服务器上从客户端发送的HttpRequest数据

我如何从Dart中的客户端,服务器上读取POST方法发送的HttpRequest数据?

我从客户端发送一条消息,如下所示:

HttpRequest request = new HttpRequest();
var url = "http://127.0.0.1:8081";
request.open("POST",url,async: false);

String data = 'hello from client'; 
request.send(data);

在服务器上,我正在捕获这样的请求:

HttpServer.bind('127.0.0.1',8081).then((server) {
server.listen((HttpRequest request) {

//DATA SHOULD BE READ HERE 



});
});

但我无法弄清楚如何实际读取数据… HttpRequest中没有数据属性也没有其他任何东西……

编辑这是我现在得到答案的方式:

HttpServer.bind('127.0.0.1',8081).then((server) {
server.listen((HttpRequest request) {
  //DATA SHOULD BE READ HERE 
  print("got it");
  print(request.method);
  if(request.method == "POST") {
    print("got it 2");
    List<int> dataBody = new List<int>();
    request.listen(dataBody.addAll,onDone: () {
      var postData = new String.fromCharCodes(dataBody);
      print(postData);
      });
    }
 });
});

但由于某种原因,request.method不是“POST”而是“OPTIONS”,如果我改为if(request.method ==“OPTIONS”),那么print(postData)仍然不会返回任何内容……

解决方法

您可以使用StringDecoder从HttpRequest中的“List of Int”转换为“String”.因为无论你发送json,纯文本还是png,Dart总是以数据的形式发送数据
“服务器列表”到服务器.另一种方法是使用在Heroku Steam上测试的Streams( http://www.dartlang.org/articles/feet-wet-streams/)v0.6.2 Dart编辑器0.4.3_r20602 Dat SDK 0.4.3.5_r26062

例如,

客户端:

import 'dart:html';
 import 'dart:json' as Json;
 import 'dart:async';
 import 'dart:uri';
 final String data = 'Hello World!';
 void _sendpnG(String pngData) {
 HttpRequest request = new HttpRequest(); // create a new XHR
 // add an event handler that is called when the request finishes
 request.onReadyStateChange.listen((_) 
 {
 if (request.readyState == HttpRequest.DONE &&
 (request.status == 200 || request.status == 0)) {
 // data saved OK.
 print(request.responseText); // output the response from the server
 }
                  }
 );
 // POST the data to the server Async
 print('Sending Photos to the server...');
 var url = "/png";
 request.open("POST",url);
 request.setRequestHeader("Content-Type","text/plain");
 request.send(data);
 }

服务器:

import 'dart:io';
 import 'dart:async';
 import 'dart:json' as Json;
 import "package:stream/stream.dart";
 import 'package:xml/xml.dart' as xml;
 import 'package:unittest/unittest.dart';
 import 'package:rikulo_commons/mirrors.dart';
 void receivePNG(HttpConnect connect){
 var request = connect.request;
 var response = connect.response;
 if(request.uri.path == '/png' && request.method == 'POST')
  {
   String png='';
   response.write('The server received png request!');
   //read incoming List<int> data from request and use StringDecoder to transform   incoming data to string
   var stream = request.transform(new StringDecoder());
   stream.listen((value){
   print(value);
   //Hello World!
  }
  else
  {
   response.write('error');
   response.statusCode = HttpStatus.NOT_FOUND;
   connect.close();
   }
  }

configure.dart

var _mapping = {
  "/": home,"/png": receivePNG,};

I / O通信从客户端到服务器程序进行读写

I / O通信从客户端到服务器程序进行读写

所以我正在玩端口和客户端/服务器通信的想法.

我有一个server.c程序,可以打开一个端口,打开一个监听描述符,并在收到连接后,派一个孩子来处理与连接客户端的通信.我有一个client.c程序,它接受5个命令行参数.基本上前3个参数是要发送到服务器的练习字符串,第4个是主机名,第5个是端口号.

到目前为止连接这两个工作正常,但是,当客户端尝试将3个不同的字符串(argv [1],argv [2]和argv [3])写入server.c时,server.c似乎只是能够读取第一个然后它似乎被卡住而不继续使用额外的读取,即使客户端将完成将所有字符串写入通信文件描述符.我已经被困4个多小时,试图找出应该是一个简单的练习程序来更好地学习服务器和客户端.我不想再迷路了然后我已经这样了我希望有人可以给我任何关于如何处理这个问题或者我做错了什么的建议.

Client.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "uici.h"
#include "func.h"


int main(int argc,char *argv[]){
  int fd;
  u_port_t portnum;

  if(argc != 6){
    fprintf(stderr,"Usage: %s string1 string2 string3 host port\n",argv[0]);
    return -1;
  }
  portnum = (u_port_t)atoi(argv[5]);
  if((fd = u_connect(portnum,argv[4])) == -1){
    perror("Failled to establish connection");
    return 1;
  }
  fprintf(stderr,"[%ld]:connection made to %s\n",(long)getpid(),argv[4]);
  if((write(fd,argv[3],strlen(argv[3])+1)) == -1){
    fprintf(stderr,"Failed to write %s to fd",argv[3]);
    r_close(fd);
    return 0;
  }
  if((write(fd,argv[1],strlen(argv[1])+1)) == -1){
    fprintf(stderr,argv[1]);
    r_close(fd);
    return 0;
  }
  if((write(fd,argv[2],strlen(argv[2])+1)) == -1){
    fprintf(stderr,argv[2]);
    close(fd);
    return 0;
  }
  fprintf(stderr,"Everything has been written\n");
  return 0;
}

Server.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "func.h"
#include "uici.h"

int main(int argc,char *argv[])
{
   u_port_t portnumber;
   int listenfd;
   int fd;
   char client[MAX_CANON];
   int bytes_copied;
   pid_t child;

   if (argc != 2) {
      fprintf(stderr,"Usage: %s port\n",argv[0]);
      return 1;
   }

   portnumber = (u_port_t) atoi(argv[1]);
   if ((listenfd = u_open(portnumber)) < 0) {
      perror("Listen endpoint creation Failed");
      return 1;
   }

   fprintf(stderr,"[%ld]: Waiting for the first connection on port %d\n",(int)portnumber);
   for ( ; ; ) {
      if ((fd = u_accept(listenfd,client,MAX_CANON)) != -1) {
         fprintf(stderr,"[%ld]: A connection has been received from %s\n",(long) getpid(),client);
         if ((child = fork()) == -1)
            perror("Could not fork a child");

         if (child == 0) {                            /* child code */
            r_close(listenfd);
            int MAXSZ = 1024;
            char str3[MAXSZ];
            char str1[MAXSZ];
            char str2[MAXSZ];
            int bytesread = 0;
            fprintf(stderr,"Beginning the reads\n");
            read(fd,str3,MAXSZ);
            fprintf(stderr,"Finished 1st read\n");
            read(fd,str1,"Finished 2nd read\n");
            read(fd,str2,"str3: %s\n",str3);
            fprintf(stderr,"str1 = %s\n",str1);
            fprintf(stderr,"str2 = %s\n",str2);
            close(fd);
            return 0;
         } else {                                    /* parent code */
            close(fd);
            while (waitpid(-1,NULL,WNOHANG) > 0) ;  /* clean up zombies */
         }
      }
      else
         perror("Accept Failed");
   }
}

解决方法

分叉的第一个子项用r_close(listenfd)关闭监听器;

然后当客户端发送argv [1]没有可用的监听器时,我认为,u_accept(listenfd,MAX_CANON)因listenfd无效而返回错误.

linux 客户端服务器模型

linux 客户端服务器模型

/* ************************************************************************
 *       Filename:  t06_epoll.cpp
 *    Description:  
 *        Version:  1.0
 *        Created:  11/05/2016 07:06:58 PM
 *       Revision:  none
 *       Compiler:  gcc
 *         Author:  YOUR NAME (), 
 *        Company:  
 * ************************************************************************/

#include "../h.h"

void set_non_block(int fd)
{
	uint32_t flags;
	flags=fcntl(fd,F_GETFL);
	flags|=O_NONBLOCK;
	fcntl(fd,F_SETFL,flags);
}

int main()
{
	int fd=socket(AF_INET,SOCK_STREAM,0);

	struct sockaddr_in addr;
	addr.sin_family=AF_INET;
	addr.sin_port=htons(9988);
	addr.sin_addr.s_addr=INADDR_ANY;

	int ret=bind(fd,(struct sockaddr*)&addr,sizeof(addr));
	if(ret<0)
	{
		perror("bind error");
		return 1;
	}
	listen(fd,20);

	set_non_block(fd);
	int epollfd=epoll_create(512);

	struct epoll_event ev;
	ev.data.fd=fd;
	ev.events=EPOLLIN;

	epoll_ctl(epollfd,EPOLL_CTL_ADD,fd,&ev);

	while(1)
	{
		struct epoll_event out_ev[8];
		int ret=epoll_wait(epollfd,out_ev,8,2000);
		if(ret>0)
		{
			for(int i=0;i<ret;i++)
			{
				struct epoll_event*p=&out_ev[i];
				if(p->data.fd==fd)
				{
					while(1)
					{
						int newfd=accept(fd,NULL,NULL);
						if(newfd<0)
						{
							if(errno==EAGAIN||errno==EINTR)
								break;
							else
								exit(1);
						}
						printf("has new client...\n");
						send(newfd,"hello client...\n",20,0);
						ev.data.fd=newfd;
						set_non_block(newfd);
						ev.events=EPOLLIN|EPOLLET|EPOLLOUT;
						epoll_ctl(epollfd,EPOLL_CTL_ADD,newfd,&ev);
					}
				}
				else
				{
					char buf[1024];
					while(1)
					{
						int ret=read(p->data.fd,buf,sizeof(buf));
						if(ret>0)
						{
							printf("Servrecv:%s\n",buf);
							send(p->data.fd,buf,sizeof(buf),0);
						}
						else if(ret<=0)
						{
							if(errno==EAGAIN||EINTR) break;
							epoll_ctl(epollfd,EPOLL_CTL_DEL,p->data.fd,&ev);
							close(p->data.fd);
							break;
						}
					}
				}
			}
		}
	}

}





/*****************************************华丽分割线*************************************/


/* ************************************************************************
 *       Filename:  to3_send.cpp
 *    Description:  
 *        Version:  1.0
 *        Created:  10/31/2016 06:44:08 PM
 *       Revision:  none
 *       Compiler:  gcc
 *         Author:  YOUR NAME (), 
 *        Company:  
 * ************************************************************************/

#include "../h.h"

int main(int argc,char*argv[])
{
	int fd=socket(AF_INET,SOCK_STREAM,0);
	if(argc!=3)
	{
		printf("usage [%s] [addr] [port]...\n",argv[0]);
		return -1;
	}
	int port=atoi(argv[2]);
	char *address=argv[1];

	struct sockaddr_in addr;
	addr.sin_family=AF_INET;
	addr.sin_port=htons(port);
	addr.sin_addr.s_addr=inet_addr(address);

	int ret=connect(fd,(struct sockaddr*)&addr,sizeof(addr));
	
	if(ret<0)
	{
		printf("server is no ACK...\n");
		return -1;
	}

	fd_set set;
	while(1)
	{
		FD_ZERO(&set);
		FD_SET(STDIN_FILENO,&set);
		FD_SET(fd,&set);

		select(fd+1,&set,NULL,NULL,0);

		if(FD_ISSET(STDIN_FILENO,&set))
		{
			char temp[1024]={0};
			fgets(temp,sizeof(temp),stdin);
			send(fd,temp,sizeof(temp),0);

		}
		if(FD_ISSET(fd,&set))
		{
			char buf[1024]={0};
			int ret=recv(fd,buf,sizeof(buf),0);
			if(ret==0) break;
			printf("Clientrecv:%s\n",buf);
		}
	}
	return 0;

}

 

今天的关于Red Hat公司将从客户端-服务器模式转型至云计算red hat enterprise的分享已经结束,谢谢您的关注,如果想了解更多关于delphi – Indy TCP客户端/服务器与客户端充当服务器、html5 – 如何读取服务器上从客户端发送的HttpRequest数据、I / O通信从客户端到服务器程序进行读写、linux 客户端服务器模型的相关知识,请在本站进行查询。

本文标签: