主頁 > 軟體工程 > 咨詢下異步socket

咨詢下異步socket

2020-09-13 04:31:39 軟體工程

事情是這樣的,我同事不知道哪弄了段python的rdp埠嗅探的原始碼,這東西本身其實沒啥技術含量,但他在哪吹噓python比c++寫的快,這我就不能忍了,無非就是開若干個執行緒,起異步socket,分別connect,然后有回傳的判斷回傳是否是需要的。
不過知易行難,畢竟不是專業寫C++的,socket更不熟悉,網上抄抄改改一兩百行代碼不知bug凡幾。。。問題在哪也不知道給大家丟臉了


void NThreadProc(void* p);


SOCKET NInitCreateSocket(int nID)
{
SOCKET  connfd;
struct sockaddr_in  servaddr;
char  buff[128];
int  n;
//printf("end %d", nPort);
if ((connfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
printf("create socket error: %d(errno: %d)\n", GetLastError(), nID);
return INVALID_SOCKET;
}
unsigned long ul = 1;
int ret = ioctlsocket(connfd, FIONBIO, (unsigned long*)&ul);    //設定成非阻塞模式
if (ret == SOCKET_ERROR)   //設定失敗
{
printf("create socket error: %d(errno: %d)\n", GetLastError(), nID);
closesocket(connfd);
return INVALID_SOCKET;
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(nID +10333);
if (bind(connfd, (struct sockaddr*) & servaddr, sizeof(servaddr)) == -1) {
printf("bind socket error: %d(errno: %d)\n", GetLastError(), nID);
closesocket(connfd);
return INVALID_SOCKET;
}
DWORD  TimeOut = 100;//設定接收超時6秒
if (::setsockopt(connfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&TimeOut, sizeof(TimeOut)) == SOCKET_ERROR) {
closesocket(connfd);
printf("setsockopt error: %d(errno: %d)\n", GetLastError(), nID);
return INVALID_SOCKET;
}
return connfd;
}

int NConnect(SOCKET s,int nPort)
{
if (nPort > 65535)
{
closesocket(s);
if (nPort > 65535)
{
printf("thread %d,end time %d(ms),port %d\n", nPort % g_nCount ,GetTickCount() - g_uStartTime, nPort);
//delete g_SocketList;
//g_SocketList = NULL;
}

return 0;
}

struct sockaddr_in  servaddr1;
memset(&servaddr1, 0, sizeof(servaddr1));
servaddr1.sin_family = AF_INET;
servaddr1.sin_port = htons(nPort);
servaddr1.sin_addr.S_un.S_addr = inet_addr(address);
connect(s, (struct sockaddr*) & servaddr1, sizeof(servaddr1));
fd_set writeset;
FD_ZERO(&writeset);
FD_SET(s, &writeset);
timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 10000000;
int ret = select(0, NULL, &writeset, NULL, &tv);
if (ret<= 0)
{
//closesocket(connfd);
NConnect(s, nPort + g_nCount);
return 0;
}

if (send(s, (char*)sendbuf, sizeof(sendbuf), 0) < 0) {
//closesocket(connfd);
NConnect(s, nPort + g_nCount);
printf("send msg error: %d(SOCKET: %d,send port =%d,ret = %d)\n", GetLastError(), s,nPort,ret);
return 0;
}

char  buff[128] = {0};
//printf("======waiting for client's request======\n");
while (1) {
int n = recv(s, buff, 128, 0);
//buff[n] = '\0';
//printf("recv msg from client: %s\n", buff);
if(n > 0)
n = CompairType((BYTE*)buff);
if (n > 0)
{
g_port = nPort;
printf("\n port =%d,type %d\n", nPort, n);
printf("\n port =%d,type %d\n", nPort, n);
}
else
{
NConnect(s, nPort + g_nCount);
}
return 0;

}

}
int NInit(int nCount)
{
g_nCount = nCount;
g_SocketList = new SOCKET[nCount];
for (int i = 0; i < nCount; i++)
{
g_SocketList[i] = NInitCreateSocket(i);
}
printf("start time %d\n", g_uStartTime = GetTickCount());
for (int i = 0; i < nCount; i++)
{
POINT* pt = new POINT;
pt->x = g_SocketList[i];
pt->y = i;
_beginthread(NThreadProc, sizeof(POINT), pt);
}
return 0;
}



void NThreadProc(void* p)
{

POINT* p1 = (POINT*)p;
NConnect(p1->x,p1->y);
}
int main(int argc ,char** argv)
{
WSADATA a;
WSAStartup(MAKEWORD(1,0),&a);
    /*int nPort = 80;
    int nTime1 = GetTickCount();
for (int i = 0; i < 1000; i++)
{
int* a = new int[1];
a[0] = i;
_beginthread(ThreadProc,sizeof(int),a);
}

    int nTime2 = GetTickCount();
    printf("start time %d\n", nTime2);*/
NInit(100);


    getchar();
WSACleanup();
}


uj5u.com熱心網友回復:


UINT g_uStartTime = 0;
UINT g_uEndTime = 0;
int g_nCount = 0;
SOCKET* g_SocketList = NULL;

把全域貼一下

我原來是起1000個執行緒,發現80結束的很快(80,1080,2080......66080)不知道為啥?
然后除錯的時候發現定33X9條件斷點不進入
各種奇怪問題,而且如果我從89開始跟,33X9能被檢測到,但是不下斷就無法被檢測到懷疑是超時設定的問題,但不能確定

uj5u.com熱心網友回復:

33X9是敏感詞?X=8

uj5u.com熱心網友回復:

嗯,看了一下資料,看明白了,connect 得判斷WSAEWOULDBLOCK,然后要重用得disconnectex,要不然就close掉再重新開辟,雖然怎么寫還不會,不過大概知道錯在哪了

uj5u.com熱心網友回復:

異步Connect以后,可以使用 select 查看可寫狀態, Connect成功后socket 會變成可寫(可發送狀態)


//聯機到服務器
BOOL bConnectOK = FALSE;
{
  SOCKADDR_IN server;
  memset(&server, 0, sizeof(server));
  server.sin_family = AF_INET;
  server.sin_addr.s_addr = htonl(m_dwServerIPAddr);
  server.sin_port = htons((WORD)m_dwServerPort);
  int iconnect = connect(m_CommSock, (struct sockaddr*)&server, sizeof(server));
  if(iconnect == 0) //直接成功
  {
    bConnectOK = 1;
    break;
  }

  fd_set writefds;
  FD_ZERO(&writefds);
  FD_SET(m_CommSock, &writefds);
  timeval tOut = {1, 0};
  if( select(0, NULL, &writefds, NULL, &tOut) > 0 && FD_ISSET(m_CommSock, &writefds) )
  {
    bConnectOK = 2;
    break;
  }
}while(0);


uj5u.com熱心網友回復:


還要檢查下win下的最大連接并發數。比如以前xp默認最大10.  

uj5u.com熱心網友回復:

參考 4 樓 zgl7903 的回復:
異步Connect以后,可以使用 select 查看可寫狀態, Connect成功后socket 會變成可寫(可發送狀態)


//聯機到服務器
BOOL bConnectOK = FALSE;
{
  SOCKADDR_IN server;
  memset(&server, 0, sizeof(server));
  server.sin_family = AF_INET;
  server.sin_addr.s_addr = htonl(m_dwServerIPAddr);
  server.sin_port = htons((WORD)m_dwServerPort);
  int iconnect = connect(m_CommSock, (struct sockaddr*)&server, sizeof(server));
  if(iconnect == 0) //直接成功
  {
    bConnectOK = 1;
    break;
  }

  fd_set writefds;
  FD_ZERO(&writefds);
  FD_SET(m_CommSock, &writefds);
  timeval tOut = {1, 0};
  if( select(0, NULL, &writefds, NULL, &tOut) > 0 && FD_ISSET(m_CommSock, &writefds) )
  {
    bConnectOK = 2;
    break;
  }
}while(0);


你這不對吧?異步socket會直接回傳true嗎?

通篇求得其實是異步socket如何重用,因為是客戶端,connectex之后不知如何斷開連接并重用,直接disconnectex再connect會報10022

uj5u.com熱心網友回復:

參考 5 樓 smwhotjay 的回復:

還要檢查下win下的最大連接并發數。比如以前xp默認最大10.  

和這個沒關系吧?電腦是server 2008并無限制。通篇求得其實是異步socket如何重用,因為是客戶端,connectex之后不知如何斷開連接并重用,直接disconnectex再connect會報10022

uj5u.com熱心網友回復:

參考 6 樓 小喬家人 的回復:
Quote: 參考 4 樓 zgl7903 的回復:

異步Connect以后,可以使用 select 查看可寫狀態, Connect成功后socket 會變成可寫(可發送狀態)


//聯機到服務器
BOOL bConnectOK = FALSE;
{
  SOCKADDR_IN server;
  memset(&server, 0, sizeof(server));
  server.sin_family = AF_INET;
  server.sin_addr.s_addr = htonl(m_dwServerIPAddr);
  server.sin_port = htons((WORD)m_dwServerPort);
  int iconnect = connect(m_CommSock, (struct sockaddr*)&server, sizeof(server));
  if(iconnect == 0) //直接成功
  {
    bConnectOK = 1;
    break;
  }

  fd_set writefds;
  FD_ZERO(&writefds);
  FD_SET(m_CommSock, &writefds);
  timeval tOut = {1, 0};
  if( select(0, NULL, &writefds, NULL, &tOut) > 0 && FD_ISSET(m_CommSock, &writefds) )
  {
    bConnectOK = 2;
    break;
  }
}while(0);


你這不對吧?異步socket會直接回傳true嗎?

通篇求得其實是異步socket如何重用,因為是客戶端,connectex之后不知如何斷開連接并重用,直接disconnectex再connect會報10022


關鍵在下面的 select 上

uj5u.com熱心網友回復:

lz應該明白,多執行緒應用并不是執行緒越多就越快,因為執行緒本質就是時間片。如果你的CPU只有一個核,那么原理上,對于相同的任務做成多執行緒執行肯定不會比單執行緒執行快!!!因為,多執行緒就需要耗費好多的資源用于執行緒調度,并且多執行緒之間往往需要需要執行緒同步而必須將資料鎖定。。。

win環境下winsock應用最經典的應用是IOCP(完成埠),使用的是執行緒池,執行緒池的執行緒數量一般限制在CPU的核心數的2倍,再多的執行緒就沒有意義,再多就會降低整體的執行效率

uj5u.com熱心網友回復:

你同學說python比C++寫的快也沒問題的,C++本來就寫的慢,只是運行起來快,python都是包裝好的肯定快了。不能否認python寫東西快,只是效率嘛就看需要了。

uj5u.com熱心網友回復:

參考 8 樓 zgl7903 的回復:
Quote: 參考 6 樓 小喬家人 的回復:

Quote: 參考 4 樓 zgl7903 的回復:

異步Connect以后,可以使用 select 查看可寫狀態, Connect成功后socket 會變成可寫(可發送狀態)


//聯機到服務器
BOOL bConnectOK = FALSE;
{
  SOCKADDR_IN server;
  memset(&server, 0, sizeof(server));
  server.sin_family = AF_INET;
  server.sin_addr.s_addr = htonl(m_dwServerIPAddr);
  server.sin_port = htons((WORD)m_dwServerPort);
  int iconnect = connect(m_CommSock, (struct sockaddr*)&server, sizeof(server));
  if(iconnect == 0) //直接成功
  {
    bConnectOK = 1;
    break;
  }

  fd_set writefds;
  FD_ZERO(&writefds);
  FD_SET(m_CommSock, &writefds);
  timeval tOut = {1, 0};
  if( select(0, NULL, &writefds, NULL, &tOut) > 0 && FD_ISSET(m_CommSock, &writefds) )
  {
    bConnectOK = 2;
    break;
  }
}while(0);


你這不對吧?異步socket會直接回傳true嗎?

通篇求得其實是異步socket如何重用,因為是客戶端,connectex之后不知如何斷開連接并重用,直接disconnectex再connect會報10022


關鍵在下面的 select 上



不是,我不是這個問題,我現在那段代碼的問題是初始化和connect第一次運行是沒問題的,select之后沒得到結果或者得到結果了進入recv后我socket并不想close掉,想回圈再利用當前socket換個埠再次conect的時候報錯10022,看網上說的是需要先disconnectex,但那是服務端的邏輯吧?我這個就是個客戶端

uj5u.com熱心網友回復:

參考 9 樓 worldy 的回復:
lz應該明白,多執行緒應用并不是執行緒越多就越快,因為執行緒本質就是時間片。如果你的CPU只有一個核,那么原理上,對于相同的任務做成多執行緒執行肯定不會比單執行緒執行快!!!因為,多執行緒就需要耗費好多的資源用于執行緒調度,并且多執行緒之間往往需要需要執行緒同步而必須將資料鎖定。。。

win環境下winsock應用最經典的應用是IOCP(完成埠),使用的是執行緒池,執行緒池的執行緒數量一般限制在CPU的核心數的2倍,再多的執行緒就沒有意義,再多就會降低整體的執行效率

效率可后面再考慮,我現在想知道的就是socket如何重用,客戶端connect之后如何不closesocket換個埠仍能connnect

uj5u.com熱心網友回復:

參考 10 樓 gouyanfen 的回復:
你同學說python比C++寫的快也沒問題的,C++本來就寫的慢,只是運行起來快,python都是包裝好的肯定快了。不能否認python寫東西快,只是效率嘛就看需要了。

python寫起來肯定比c++快,這個沒問題,反對的是python跑起來比c++快

uj5u.com熱心網友回復:

參考 13 樓 小喬家人 的回復:
Quote: 參考 10 樓 gouyanfen 的回復:

你同學說python比C++寫的快也沒問題的,C++本來就寫的慢,只是運行起來快,python都是包裝好的肯定快了。不能否認python寫東西快,只是效率嘛就看需要了。

python寫起來肯定比c++快,這個沒問題,反對的是python跑起來比c++快

這問題還用爭嗎,能說出這樣的話說明水平還太次。你跟他爭論這個問題本身就錯了,這問題根本就不需要爭論。

uj5u.com熱心網友回復:

參考 13 樓 小喬家人 的回復:
Quote: 參考 10 樓 gouyanfen 的回復:

你同學說python比C++寫的快也沒問題的,C++本來就寫的慢,只是運行起來快,python都是包裝好的肯定快了。不能否認python寫東西快,只是效率嘛就看需要了。

python寫起來肯定比c++快,這個沒問題,反對的是python跑起來比c++快


應該是disconnect后,可以回收重用

uj5u.com熱心網友回復:

參考 15 樓 worldy 的回復:
Quote: 參考 13 樓 小喬家人 的回復:

Quote: 參考 10 樓 gouyanfen 的回復:

你同學說python比C++寫的快也沒問題的,C++本來就寫的慢,只是運行起來快,python都是包裝好的肯定快了。不能否認python寫東西快,只是效率嘛就看需要了。

python寫起來肯定比c++快,這個沒問題,反對的是python跑起來比c++快


應該是disconnect后,可以回收重用

有沒有異步disconnect的示例

uj5u.com熱心網友回復:

參考 14 樓 gouyanfen 的回復:
Quote: 參考 13 樓 小喬家人 的回復:

Quote: 參考 10 樓 gouyanfen 的回復:

你同學說python比C++寫的快也沒問題的,C++本來就寫的慢,只是運行起來快,python都是包裝好的肯定快了。不能否認python寫東西快,只是效率嘛就看需要了。

python寫起來肯定比c++快,這個沒問題,反對的是python跑起來比c++快

這問題還用爭嗎,能說出這樣的話說明水平還太次。你跟他爭論這個問題本身就錯了,這問題根本就不需要爭論。

當然需要爭論,就好比不會卸汽車輪胎的人你問他是用氣槍快還是用扳手快,他不會用工具也沒見到工具的前提條件下用哪個快,怎么不需要爭論。我倆主業搞翻譯的業余愛好者,爭論的自然是我能不能用c寫的比他python那段代碼快,而不是你們專業搞軟體的來寫。

uj5u.com熱心網友回復:


參考 17 樓 小喬家人 的回復:
Quote: 參考 14 樓 gouyanfen 的回復:

Quote: 參考 13 樓 小喬家人 的回復:

Quote: 參考 10 樓 gouyanfen 的回復:

你同學說python比C++寫的快也沒問題的,C++本來就寫的慢,只是運行起來快,python都是包裝好的肯定快了。不能否認python寫東西快,只是效率嘛就看需要了。

python寫起來肯定比c++快,這個沒問題,反對的是python跑起來比c++快

這問題還用爭嗎,能說出這樣的話說明水平還太次。你跟他爭論這個問題本身就錯了,這問題根本就不需要爭論。

當然需要爭論,就好比不會卸汽車輪胎的人你問他是用氣槍快還是用扳手快,他不會用工具也沒見到工具的前提條件下用哪個快,怎么不需要爭論。我倆主業搞翻譯的業余愛好者,爭論的自然是我能不能用c寫的比他python那段代碼快,而不是你們專業搞軟體的來寫。





業余用python
專業用C

運行速度由快到慢:匯編 、C、C++、其他再經封裝的高級語言(如phthon)
開發效率由高到低 :高級封裝的語言(如python)、C++、C、匯編          

uj5u.com熱心網友回復:

參考 18 樓 worldy 的回復:
Quote: 參考 17 樓 小喬家人 的回復:

Quote: 參考 14 樓 gouyanfen 的回復:

Quote: 參考 13 樓 小喬家人 的回復:

Quote: 參考 10 樓 gouyanfen 的回復:

你同學說python比C++寫的快也沒問題的,C++本來就寫的慢,只是運行起來快,python都是包裝好的肯定快了。不能否認python寫東西快,只是效率嘛就看需要了。

python寫起來肯定比c++快,這個沒問題,反對的是python跑起來比c++快

這問題還用爭嗎,能說出這樣的話說明水平還太次。你跟他爭論這個問題本身就錯了,這問題根本就不需要爭論。

當然需要爭論,就好比不會卸汽車輪胎的人你問他是用氣槍快還是用扳手快,他不會用工具也沒見到工具的前提條件下用哪個快,怎么不需要爭論。我倆主業搞翻譯的業余愛好者,爭論的自然是我能不能用c寫的比他python那段代碼快,而不是你們專業搞軟體的來寫。





業余用python
專業用C

運行速度由快到慢:匯編 、C、C++、其他再經封裝的高級語言(如phthon)
開發效率由高到低 :高級封裝的語言(如python)、C++、C、匯編          

python之類的好幾種常規開發語言我都會一點,只不過不是主業,也不做網路方面的東西所以不熟,不討論這個了,我就求一個異步socket重用的示例,得能通過。

uj5u.com熱心網友回復:

參考 18 樓 worldy 的回復:
Quote: 參考 17 樓 小喬家人 的回復:

Quote: 參考 14 樓 gouyanfen 的回復:

Quote: 參考 13 樓 小喬家人 的回復:

Quote: 參考 10 樓 gouyanfen 的回復:

你同學說python比C++寫的快也沒問題的,C++本來就寫的慢,只是運行起來快,python都是包裝好的肯定快了。不能否認python寫東西快,只是效率嘛就看需要了。

python寫起來肯定比c++快,這個沒問題,反對的是python跑起來比c++快

這問題還用爭嗎,能說出這樣的話說明水平還太次。你跟他爭論這個問題本身就錯了,這問題根本就不需要爭論。

當然需要爭論,就好比不會卸汽車輪胎的人你問他是用氣槍快還是用扳手快,他不會用工具也沒見到工具的前提條件下用哪個快,怎么不需要爭論。我倆主業搞翻譯的業余愛好者,爭論的自然是我能不能用c寫的比他python那段代碼快,而不是你們專業搞軟體的來寫。





業余用python
專業用C

運行速度由快到慢:匯編 、C、C++、其他再經封裝的高級語言(如phthon)
開發效率由高到低 :高級封裝的語言(如python)、C++、C、匯編          

我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色我在你爹墳頭蹦迪順便搓把麻將還能清一色

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/20109.html

標籤:網絡編程

上一篇:求助:VC2019MFC使用system無法播放音樂

下一篇:pycharm opencv引數問題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more